目录
1.什么是冒泡排序
假设待排序列为9 6 4 2 7 8 5 3 1,要求是让待排序列按递增顺序排列。冒泡排序就是对待排序列扫描一次,就可以使得最大的9就位。具体过程排序过程是:先9和6比较,比6大所以位置互换得到6 9 4 2 7 8 5 3 1,然后9和4做比较,比4大互换位置得到6 4 9 2 7 8 5 3 1,接着和2进行比较,比2大互换位置得到6 4 2 9 7 8 5 3 1。。。。就这样一直比较下去,比较8次,也就是序列元素总个数N-1次。最终经过第一轮比较得到结果6 4 2 7 8 5 3 1 9,可以看出进过一轮的比较后,肯定会让最大的元素就位。
2.冒泡排序的关键点
冒泡排序的特点是进过一轮比较后,待排序列的最大或最小的元素一定会就位,但是其他元素的位置和初始序列是一摸一样,原封未动的。因此需要对经过第一轮调整后的序列再做交换排序,直到整个序列完全有序。怎样才能知道序列已经有序了呢?关键点1:就是如果一趟扫描过程中,没有发生元素交换动作,则序列就一定有序了。此外我们发现一趟扫描过程就要有一个元素就位,关键点2:那么下一个待排元素的比较次数就可以减一,因为最后一个元素已经是最大或最小了,没有再比较的必要。
3.冒泡排序应用
typedef int ElmentType;
void BubbleSort(ElmentType *S, int N)
{
int p,j,flag;
flag = 0;
for(p = N-1; p>0; p--)
{
for(j = 0;j < p; j++)
{
if(S[j] > S[j+1])
{
ElmentType tmp = S[j];
S[j] = S[j+1];
S[j+1] = tmp;
flag = 1;
}
}
if(!flag)//already in sort
break;
}
}