- 希尔排序简介
- 实现(java)
- 复杂度和稳定性
1.希尔排序简介
插入排序, 增量分组, 缩小增量直至为1, 每个分组内使用直接插入排序
2.实现(java)
public class ShellSort {
public static void main(String[] args) {
int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19};
System.out.println("原数组: " + Arrays.toString(arr));
sortArr(arr);
System.out.println("排序后: " + Arrays.toString(arr));
}
public static void sortArr(int[] arr) {
int j;
for(int incre = arr.length / 2; incre >= 1; incre /= 2) {
for(int i = incre; i < arr.length; i++) {
int tmp = arr[i];
for(j = i - incre; j >= 0; j -= incre) {
if(arr[j] > tmp) {
arr[j + incre] = arr[j];
}else {
break;
}
}
arr[j + incre] = tmp;
}
}
}
}
3.复杂度和稳定性
排序算法 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
希尔排序 | O(n) | O(n2) | O(n1.3) | O(1) | 不稳定 |
时间复杂度跟增量序列有关
交换元素时需要一个临时变量, 故空间复杂度为O(1)