注:这篇文章是数据结构之排序 一 (插入、选择)的续写。
基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。
特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。
注:在本篇文章中会用到的交换方法。
实现思路:
冒泡排序的实现思路非常简单,只需要定义两个变量,一个用于遍历数组,一个用来和数组中的元素进行比较,排序即可。
代码实现:
注:快速排序最常用 2 类,分别是 Hoare法、挖坑法。
基本思路:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
Hoare法
实现思路:
Hoare 法的实现类似于树的形式,运用到了递归的方法。
代码实现
挖坑法
实现思路
挖坑法的实现思路和 Hoare法 很相似,直接将 left 指向的元素记录下来,当满足条件时直接进行 left 和 right 下标的元素交换即可。
代码实现
通过上面的解释,我们不难发现,快速排序使用递归方法有可能会出现一个很大的问题,即,当数据处于比较有序的情况时,递归的深度就会非常的大,可能会出现栈溢出的情况,因此,在一定程度上需要进行优化,这里利用了三数取中法进行优化。
简单分析:
这里就不在对快速排序进行描述,直接对三数取中法进行描述。
在实现时,只需要先进行三数取中将元素调整后进入排序即可。
情况有以下几种:
(1) 当 start < end 时
mid < start 时,start 是中间值
mid > end 时,end 中间值
最后就是 mid 值
(2) 当 start > end 时
- mid > start 时,start 是中间值。
- mid < end 时,end 时中间值。
- 最后就是 mid 值。
三数取中法代码如下
实现思路:
代码实现:
基本思想:
是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
如图
观察上图,我们很容易可以联想到树的结构。确实,要实现归并排序的操作,同样要利用到递归的思想。
代码实现:
非递归方法:
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.bhha.com.cn/news/4910.html