public class ShellSort {
public static void main(String[] args) {
int [] arr = {-1, 5, 2, 8, 45, 4, 1, 0, 40, 32};
sort(arr);
}
/*
将原来数组长度除2,得到将原数组分为几组,依次进行,直到数组长度为0为止,
分开的数组将两个逻辑上的数组的第一位与第一位、第二位与第二位为一组, 同理下去, 每组之间进行插入排序
加入数组长度11, 第一次排序分为5组, 第二次排序2组, 第三次就为1组
最后一次排序总会将原数组分为一组, 但这次已经接近于有序的
*/
private static void sort(int [] arr){
// 定义临时交换变量
int temp = 0;
// 将原数组分组
for (int k = arr.length / 2; k > 0; k /= 2) {
// 每小组之间进行插入排序
for (int i = k; i < arr.length; i ++) {
for (int j = i - k; j >= 0; j -= k) {
// 大小值交换
if (arr[j] > arr[j + k]){
temp = arr[j];
arr[j] = arr[j + k];
arr[j + k] = temp;
}
}
}
}
// 遍历排序后
listArray(arr);
}
private static void listArray(int [] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
java希尔排序之交换
最新推荐文章于 2025-12-27 09:28:44 发布
该博客详细介绍了希尔排序的算法实现,包括主要步骤和代码示例。希尔排序是一种改进的插入排序,通过分组的方式减少元素比较次数,提高排序效率。文章中展示了如何将数组分为不同组并进行插入排序,最终达到接近有序的状态。
358

被折叠的 条评论
为什么被折叠?



