交换排序:冒泡排序和快速排序

来源:互联网 发布:人工受精精子优化处理 编辑:程序博客网 时间:2024/05/18 00:23

1.冒泡排序:冒泡排序算法是从最下面的记录开始,对每两个相邻的关键字进行比较,且使关键字较小的记录换至关键字较大的记录之上,使得经过一趟冒泡排序后,关键字最小的记录到达最上端,接着,再在剩下的记录中找关键字次小的记录,并把它换在第二个位置上。依次类推,一直到所有记录都有序为止。最小的数就如同水泡一样向上漂浮到水面,故谓之冒泡排序。

冒泡排序的改进:在有些情况下,在第i(i<n-1)趟时已排好序了,但仍执行后面几趟的比较。实际上,一旦算法中某一趟比较时不出现记录交换,说明已排好序了,就可以结束本算法。所以可以设置一个标志位,一旦不出现记录交换,则跳出循环比较。

代码和下面的快速排序在一起。

2.快速排序:在快速排序中,我们将序列分成两个子序列,再对子序列进行快速排序,并递归直到序列排序完成。

步骤:(1)在序列中选择一个记录作为枢轴,通常是第一个;

         (2)所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录排在这两部分的中间,这个过程称为快速排序;

         (3)对子序列递归快速排序,直到按从小到大排列完成。

举例:     S:6  8  7  9  0  1  3  2  4   5

        【6】 5  4  2  3  0  1  6  9  7   8(这一步中,取6作为枢轴,i,j指针分别表示左边右边的第一个元素,从右开始比较5<6,S[0]=5;8>6,S[1]和S[9]交换位置;4<6,S[8]和S[2]交换位置....不一一叙说了)

接下来分为两个子序列5  4  2  3  0  1和9  7  8,再对其快速排序,一直递归直到排序完成。

改进冒泡排序代码和快速排序代码如下:(unix环境 2011-02-12)

 

原创粉丝点击