冒泡排序

设数组长度为n,按照从小到大排序

1:从第一个数开始,比较相邻的前后两个数字,如果前面数据大于后面数据,交换两个数据;否则继续比较

2:当从data[0]遍历到data[n-1]后,最大的数字沉在data[n-1]的位置,即数组末尾;

3:n=n-1,重复上面两步,直到n=0。

void BubbleSort1(int data[],int length)
{
	for(int i = 0; i < length; i++)
	{
		for(int j = 1; j < length-i; j++)
		{
			if(data[j-1] > data[j])
			{
				Swap(data[j-1],data[j]);
			}
		}
	
	}
}

优化1:设置flag,如果某次没有交换发生,说明排序已经完成;如果交换,设置flag=true

用k表示也要比较的次数,每次经过一次排序,最大的n沉到最后,k--,那么下一次只要比较n之前的数组,n之后的已经有序

优化2:有10个数的数组,如果经过几次排序,后边的6个数字已经有序,那么下次排序,只要从第一个开始到第四个就OK,不需要继续比较后边的6个

 

原文地址:https://www.cnblogs.com/newcoder/p/5582788.html