您的位置:首页 > 其它

排序问题总结

2013-10-27 13:11 357 查看

一、插入排序

1、直接插入

主要讲的是直接插入排序的方法:
思路是:
将第I个记录插入到已经有序的I-1个记录中(其中I>1,因为当I=1时记录为一个有序记录,不用进行插入)
具体步骤:
给出待排序记录{45,38,66,90,88,10,25}
第一回合:I=2(值38插入到45中)则有序数列为:38,45
第二回合:I=3(值66插入到有序数列中)则有:38,45,66
第三回合:I=4(值90插入到有序数列中)则有:38,45,66,90
第四回合:I=5(值88插入到有序数列中)则有:38,45,66,88,,90
第五回合:I=6(值10插入到有序数列中)则有:10,38,45,66,88,90
第六回合:I=7(值25插入到有序数列中)则有:10,25,,38,45,66,88,90

二、交换排序

主要讲了冒泡排序和快速排序

1、冒泡排序

思路是:
从第一个记录开始,第I个和I+1个记录进行比较,若I>I+1则交换两个值
具体步骤:
给出待排序记录{45,38,66,90,88,10,25}
第一回合:进行交换的两个值为45,38 需交换得:38,45
第二回合,进行交换的两个值为45,66 需交换得:45,66
第三回合,进行交换的两个值为66,90 需交换得:66,90
第四回合,进行交换的两个值为90,88 需交换得:88,90
第五回合,进行交换的两个值为90,10 需交换得:10,90
第六回合,进行交换的两个值为90,25 需交换得:25,90
第一趟排序结束:顺序为:38,45,66,88,10,25,90
第二趟的回合与第一趟类似,
得出排序结果是:38,45,66,10,25,88,90
第三趟排序结果:38,45,10,25,66,88,90
第四趟排序结果:38,10,25,45,66,88,90
第五趟排序结果:10,25,38,45,66,88,90
结束
2、快速排序
思路是:
是冒泡排序的优化,到现在为止还不知道该如何用语言来描述这个过程
具体步骤:
给出待排序记录{45,38,66,90,88,10,25}
取出45作为初始比较的数据
则有:
第一回合:25,38,66,90,88,10,25
第二回合:25,38,66,90,88,10,66
第三回合:25,38,10,90,88,10,66
第四回合:25,38,10,90,88,90,66,
第五回合:25,38,10,88,88,90,66
此时第四位与第五位相同
则将45放到第四位
第一趟排序结束有:25,38,10,45,88,90,66
然后分别对25,38,10和88,90,66进行快速排序详细步骤有:
对于25,38,10

第一回合有:10,38,10
第二回合有:10,38,38
得出:10,25,38
对于88,90,66
第一回合有:66,90,66
第二回合有:66,90,90
得出:66,88,90
所以最终结果有:10,25,38,45,66,88,90

三、选择排序

基本思想是:每一次在n-i+1个记录中选取键值最小的记录作为有序序列的第i个记录
1、直接选择
思路是:第i次选择操作中,通过n-i次比较,从记录中获得最小值,并和第i个记录进行交换
具体实现步骤:
给出待排序记录{45,38,66,90,88,10,25}
注:(蓝色字体为有序部分)
第一趟排序结果:10,38,66,90,88,45,25
第二趟排序结果:10,25,66,90,88,45,38
第三趟排序结果:10,25,38,90,88,45,66
第四趟排序结果:10,25,38,45,88,90,66
第五趟排序结果:10,25,38,45,66,90,88
第六趟排序结果:10,25,38,45,66,88,90
所以最终结果是:10,25,38,45,66,88,90
2、堆排序
思想是:借用二叉树,任一结点的值都不大(小)于它的两个孩子的值
具体实现:

第一步:将给定数值建成一颗完全二叉树
第二步:从n/2开始,把这些元素以上的结点,进行筛选成堆
筛选成堆的具体实现是:
如果其父结点的大于任一子结点,则进行交换。使得父节点小于任一子节点。
介绍了这么多排序的实现方法,每次看到概念都是晕乎乎的,还是自己实现起来比较清晰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: