问题描述:
排序问题:给出一组数字,要求按照数值的大小进行排序 :
例如 {1 ,4 .5 .3 .6 .8 .7}这组数据进行升序的排列后的顺序为{1 ,3 ,4, 5 ,6 ,7 ,8};
冒泡排序:是一种简单的排序算法,它实现的过程:不断重复的走访过要排列的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,走访数列的工作就是重复的进行,直到没有再需要进行交换的的时候,就是最后序列的顺序;简单来说:就是首先比较第1个和第2个数,小数放到前面,大数放到后面,然后比较第2 个数和第3个数,小数放前,大数放后.....以此类推,直到比完最后两个数;
代码如下:
选择排序:是一种简单的排序方法,它的排序思路是:每一次从待排序的数据元素中选出最小(或者最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素都排完
代码如下
快速排序 :是一种对冒泡方法的改进,它的基本思路是:通过一趟排序,将要排序的数列分成两个部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后对这两部分再进上述的分割,整个排序的过程可以递归进行,以此达到整个数据变成有序数列:
分析:对于给定的数列:a[5 7 6 2 4 1 8 3 9] 首先我们进行第一次分割;小的放到左面,大的放到右面;
取出 第一个数5 , 设5的位置是第i个位置;第j个位置是最后一个数的位置;
若a[i]<=5,那么选择a[i+1]进行比较;若a[j]>5 ,那么选择a[j-1]进行比较,若(i<j) 那么更换a[i]和a[j]的位置;
下面我们来用快排走一下这个数组:
原数组顺序:5 7 6 2 4 1 8 3 9 key=5(以5为判定标准)
第一次比较:5 7 6 2 4 1 8 3 9 9>5, 9的位置不动,j--;
第二次比较:3 7 6 2 4 1 8 5 9 3<5,换位置;
第三次比较:3 5 6 2 4 1 8 7 9 7>5,换位置
第四次比较:3 5 6 2 4 1 8 7 9 8>5 ,8的位置不动,j--;
第五次比较:3 1 6 2 4 5 8 7 9 1<5 ,换位置;
第六次比较:3 1 5 2 4 6 8 7 9 6>5 ,换位置;
第七次比较:3 1 4 2 5 6 8 7 9 4<5,换位置;
到此位置,以5 为分界线已经使得数列在5左面的数都是<5,右面的数>5, 第一趟排序就结束了;
按照这个方法递归继续进行就可以拍好顺序。
附 动态图:
代码如下:
堆排序所谓的堆排序就是利用堆这种结构(近似完全二叉树),通过不断的比较子叶与根的值得大小来进行变换子叶和根的值,直到根的值都大于子叶的值(或者根的值都小于子叶的值)这样就完成了堆得排序;
这里就不给我的代码了,我在学堆排序的时候,看到了博客园的海子的一篇对堆排序的博客,对我理解堆排序的帮助很大,这里推荐给大家:
地址:http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html