排序介绍(选择+冒泡+快排+堆排序)

问题描述:

排序问题:给出一组数字,要求按照数值的大小进行排序 :

例如 {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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值