大家可以关注一下专栏,方便大家需要的时候直接查找,专栏将持续更新~
题目描述
编写一个Java程序,实现希尔排序算法。程序需要能够接收一个整型数组作为输入,并输出排序后的数组。
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法,它的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。
解题思路
希尔排序的核心思想是将待排序数组分割成若干个子序列,对子序列进行插入排序,然后逐步缩小子序列的间隔,直到间隔为1,此时数组已经基本有序,再进行一次插入排序。具体步骤如下:
- 选择一个增量序列t1,t2,……,tk,其中ti > tj,tk = 1。
- 按增量序列个数k,对序列进行k 趟排序。
- 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
源码答案
public class ShellSort {
public static void main(String[] args) {
int[] array = {9, 8, 3, 7, 5, 6, 4, 1}; // 测试数组
shellSort(array);
for (int i : array) {
System.out.print(i + " ");
}
}
public static void shellSort(int[] array) {
int n = array.length;
// 初始化间隔gap
int gap = n / 2;
// 间隔gap逐渐减小
while (gap > 0) {
// 对各个子数组进行插入排序
for (int i = gap; i < n; i++) {
int temp = array[i];
int j;
for (j = i; j >= gap && array[j - gap] > temp; j -= gap) {
array[j] = array[j - gap];
}
array[j] = temp;
}
// 更新间隔
gap /= 2;
}
}
}
输出结果
程序运行后,输出应为:1 3 4 5 6 7 8 9,这是对输入数组进行希尔排序后的结果。
AI时代的游轮已经到来
如果你觉得开发过程中存在重复性工作,效率不够高。
不妨看看影子的AI+编程玩法,助力每一位编程人员提高效率,无论你是在校学生或是工作者,都应为未来的AIG时代做准备。