您的位置:首页 > 编程语言 > C语言/C++

c++:选择排序和冒泡排序

2012-12-03 15:02 337 查看
//============================================================================
// Name        : suanfa.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#define N 5
using namespace std;

void SelectSort(int r[],int n)//数组下标从1开始
{
int index=0;
for(int i=1;i<=n-1;i++)//对N个记录进行n-1次的简单选择排序
{
index=i;
for(int j=i+1;j<=n;j++)
{
if(r[index]>r[j])
{
index=j;//找到最小的位置
}
}
if(index!=i)
{
r[i]=r[index]^r[i];
r[index]=r[i]^r[index];
r[i]=r[i]^r[index];
}
}
}

void BubbleSort(int r[],int n)
{
//气泡排序开始的时候扫描整个序列,在扫描过程中两两比较相邻记录,如果反序则交换,最终
//最大记录就被放到序列的最后一个位置,直到n-1次排序之后
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(r[i]>r[j])
{
r[i]=r[i]^r[j];
r[j]=r[i]^r[j];
r[i]=r[i]^r[j];
}
}
}
}

void BubbleSort1(int r[],int n)
{
//气泡排序开始的时候扫描整个序列,在扫描过程中两两比较相邻记录,如果反序则交换,最终
//最大记录就被放到序列的最后一个位置,直到n-1次排序之后
int exchange = n;//第一趟气泡排序的范围是r[1]到r

while(exchange)//仅当上一趟排序有记录交换才进行本趟排序
{
int bound=exchange;//每次循环开始都要先设置exchange为0,为了避免的就是减少循环的次数
exchange=0;
for(int j=1;j<bound;j++)
{
if(r[j]>r[j+1])
{
r[j]=r[j+1]^r[j];
r[j+1]=r[j]^r[j+1];
r[j]=r[j]^r[j+1];
exchange=j;
}
}
}
}

void display(int r[],int n)
{
for(int i=0;i<n;i++)
{
cout<<r[i]<<endl;
}
}

int main()
{
int r[5]={5,4,3,2,1};
int n=N;
SelectSort( r, n);
display(r,n);
BubbleSort(r, n);
display(r,n);
BubbleSort1(r, n);
display(r,n);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐