📅  最后修改于: 2023-12-03 15:34:58.264000             🧑  作者: Mango
ShellSort是一种排序算法,它是插入排序的一种改进版。它通过将待排序元素分组,对每组应用插入排序,不断减小组的数量直到最后一组,最后应用一次插入排序完成排序。
ShellSort的时间复杂度最好情况下为O(n log n),最坏情况下为O(n2)。空间复杂度为O(1)。
下面是使用Java实现的ShellSort算法程序:
public class ShellSort {
public static void sort(int[] arr) {
int n = arr.length;
//初始化gap为数组长度的一半
int gap = n / 2;
//持续缩小gap直到为1
while (gap > 0) {
//对每个分组进行插入排序
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j = i;
//对每个分组的元素进行插入排序
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
//缩小gap
gap /= 2;
}
}
public static void main(String[] args) {
int[] arr = {64, 25, 12, 22, 11};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}
sort()
方法接收一个待排序的整数数组。n
变量记录数组的长度。gap
变量初始化为数组长度的一半,并且在后续过程中不断缩小。while
循环不断缩小gap
直到为1。for
循环对每个分组进行插入排序,将分组分为若干个元素的序列。插入排序
将序列中的每个元素插入到前面已排好序的子序列中。内部while
循环对每个分组中的元素进行插入排序。arr[j - gap] > temp
比较前一个元素是否大于后一个元素。gap /= 2
缩小gap。main()
方法用于演示ShellSort算法的应用。System.out.println()
用于打印排序后的数组。ShellSort是一种比较高效的排序算法,它通过不断缩小分组大小来减少插入排序的时间复杂度。ShellSort是插入排序算法的一种改进,它在性能上有很大的提升,因此在实际开发中得到了广泛应用。