mirror of
https://github.com/Didnelpsun/CS408.git
synced 2026-06-18 01:19:14 +08:00
更新排序
This commit is contained in:
@@ -41,9 +41,11 @@
|
||||
|
||||
也称为折半插入排序,是对直接插入排序的优化,在寻找插入位置时使用二分查找的方式。
|
||||
|
||||
当data[mid]==data[i]时,为了保证算法的稳定性,会继续在mid所指位置右边寻找插入位置。
|
||||
当$data[mid]==data[i]$时,为了保证算法的稳定性,会继续在$mid$所指位置右边寻找插入位置。
|
||||
|
||||
当low>high时停止折半查找,并将[low,i-1]内的元素全部右移,并把元素值赋值到low所指的位置。
|
||||
当$low>high$时停止折半查找,并将$[low,i-1]$内的元素全部右移,并把元素值赋值到$low$所指的位置。
|
||||
|
||||
折半插入排序是找到位置了后一起移动元素,而直接插入排序是边查找边排序。
|
||||
|
||||
#### 二分插入排序的性能
|
||||
|
||||
@@ -51,15 +53,17 @@
|
||||
|
||||
二分插入排序是稳定的。
|
||||
|
||||
比起直接插入排序,比较关键字的次数减少,移动元素的次数没变,所以总体时间复杂度为$O(n^2)$。
|
||||
比起直接插入排序,比较关键字的次数减少为$O(n\log_2n)$,移动元素的次数没变,所以总体时间复杂度为$O(n^2)$。
|
||||
|
||||
### 希尔排序
|
||||
|
||||
又称缩小增量排序。
|
||||
|
||||
#### 希尔排序的过程
|
||||
|
||||
希尔排序也是对直接插入排序的优化。直接插入排序对于基本有序的序列排序效果较好,所以就希望序列能尽可能基本有序。从而希尔排序的思想就是先追求表中元素部分有序,然后逐渐逼近全局有序。
|
||||
|
||||
先将整个待排序元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的),分别进行直接插入排序,然后缩小增量重复上述过程,直到增量为1。
|
||||
先将整个待排序元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的),分别进行直接插入排序(或者折半插入排序),然后缩小增量重复上述过程,直到增量为$1$。每次对比只对比两个元素进行插入交换。
|
||||
|
||||
增量序列的选择建议是第一趟选择元素个数的一半,后面不断缩小到原来的一半。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user