本文共 1691 字,大约阅读时间需要 5 分钟。
希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,也称为缩小增量排序。它是简单插入排序经过改进之后的一个更高效的一个插入排序算法。
举例子: 数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是: {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入的数是较小的数时,后移的次数明显增多,导致效率低下。相关文章:
希尔排序是把数据按下标的一定增量 进行分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,最后在进行最后一次直接插入排序就可完成。
package com.datastructure.sort;import java.util.Arrays;/** * @author Hacah * @date 2020/10/13 20:21 */public class ShellSort { public static void main(String[] args) { int[] arr = { 8, 9, 1, 7, 2, 3, 5, 4, 6, 0}; shellSort(arr); } // 插入法 public static void shellSort(int[] arr) { int count = 0; for (int gap = arr.length / 2; gap > 0; gap = gap / 2) { // 从第gap个元素,逐个对其所在的组进行直接插入排序 for (int i = gap; i < arr.length; i++) { int j = i; // 记录要插入的数据 int temp = arr[j]; if (arr[j] < arr[j - gap]) { while (j - gap >= 0 && temp < arr[j - gap]) { // 移动 arr[j] = arr[j - gap]; j -= gap; } } arr[j] = temp; } System.out.println("第" + ++count + "次循环" + Arrays.toString(arr)); } }}
相关文章:
转载地址:http://ohugf.baihongyu.com/