排序
- 排序:即将原本无序的序列重新排列成有序序列的过程。
- 排序的稳定性:所谓排序的稳定性就是当待排序序列当中有两个或者两个以上相同的关键字时,排序前后这些关键字的相对位置如果没有发生变化就是稳定的。
插入类排序
- 直接插入排序
- 原始序列 :49 ,38 , 65 , 50
- 一开始只看49,一个数是有序的。
- 排序结果:已排序( 49 ) 待排序( 38,65,50)
- 插入38。38<49,所以49向后移动一个位置,38插入到49原来位置。
- 排序结果:已排序( 38,49 ) 待排序( 65,50)
- 插入65。65>49,所以不需要移动,65就应该在49之后。
- 排序结果:已排序( 38,49 ,65) 待排序( 50)
- 插入50。50<65,所以65向后移动一个位置,继续比较50>49,所以50应该排在49和65之间。
- 排序结果:已排序( 38,49 ,50,65)
- 折半插入排序
- 折半插入排序的基本思想和直接插入排序类似,区别是查找位置的方法不同,折半插入排序是采用折半查找法来查找插入位置。折半查找法的一个基本条件是序列已经有序。
- 举一个例子,现在的序列是13,38,49,65,76,97 待插入数字27,80
- 13的下标是0,97的下标是5,将(0+5)/2向下取整得到下标是2,对应的数字是49,27<49,所以继续查找,(0+1)/2向下取整为0,0的下标是13,因为27>13,所以继续查找(1+1)/2=1,下标为1的数字为38,27<38所以继续查找,由于低位下标1大于高位下标0,所以27应该插入到13之后。
- 同理可以找到80应当插入的位置。
- 希尔排序
- 49,38,65,97,76,13,27,49,55,04
- 以增量5分割序列,得到以下几个子序列
- 子序列1:49 13
- 子序列2: 38 27
- 子序列3: 65 49
- 子序列4: 97 55
- 子序列5: 76 04
- 分别对这5个子序列进行直接插入排序,得到
- 子序列1:13 49
- 子序列2: 27 38
- 子序列3: 49 65
- 子序列4: 55 97
- 子序列5: 04 76
- 一趟希尔排序结束,结果为:
- 13,27,49,55,04,49,38,65,97,76
- 再以分量3做如上的分割,最后以分量1做分割,即对全体关键字进行一趟直接插入排序,从而完成整个希尔排序。
交换类排序
- 冒泡排序
- 待更新
- 快速排序
- 待更新
选择类排序
- 简单选择排序
- 待更新
- 堆排序
- 待更新