//============================================================================
// 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[n]
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;
}
c++:选择排序和冒泡排序
最新推荐文章于 2024-07-27 16:13:43 发布