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

//============================================================================
// 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++:选择排序和冒泡排序)