文章目录
- 希尔排序简介
- 代码实现
希尔排序简介
- 希尔排序(shell sort)选定一个小于N(数列长度)的整数gap作为第一增量,然后将所有距离为gap的元素分成一组,然后对每一组的元素进行插入排序。
- 然后再取一个比前一个增量小的整数作为增量,重复上面的步骤操作…
- 当增量大小减少到1时候,就相当于对整个序列再进行一次插入排序,然后排序完成。
代码实现
package com.xxliao.algorithms.sort.shell_sort;/*** @author xxliao* @description: 希尔排序* @date 2024/5/30 21:44*/
public class ShellSort {public static void main(String[] args) {int[] array = {1,6,2,6,8,3,8,3,9,3,4,6,56,8};System.out.print("排序前:");printArray(array);sort(array);System.out.print("排序后:");printArray(array);}/*** @description 希尔排序* @author xxliao* @date 2024/5/30 21:46*/public static void sort(int[] array) {// 定义gap,初始等于lengthint gap = array.length;while(gap > 1) {gap = gap / 2;// 单次gap排序for (int i = 0; i < array.length - gap; i++) {int end = i;int nextItem = array[end+gap];while(end >= 0) {if(array[end] > nextItem) {// 前面的值比后面大,换到后面位置去array[end+gap] = array[end];end = end - gap;// end小于gap时候是退出里层循环,end大于gap的时候是进行下一次的轮询}else {// 前面的值小于等于后面的值,不用替换break;}}array[end+gap] = nextItem;}}}/*** @description 打印数组* @author xxliao* @date 2024/5/30 21:47*/public static void printArray(int[] array) {for (int i = 0; i <= array.length - 1; i++) {System.out.print(array[i]+" ");}System.out.println();}
}
演示结果: