十大排序——7.希尔排序

下面我们来看一下希尔排序

目录

1.介绍

2.代码实现

3.总结与思考


1.介绍

希尔排序是插入排序的一种优化,可以理解为是一种分组的插入排序

希尔排序的要点:

简单来说,就是分组实现插入,每组元素的间隙称为gap,**一开始给你一个无序数组,然后我们以gap为间隙对这个数组进行分组,然后在每组内对数据进行排序,这就实现了每组的数据有序性。然后,我们减小gap的值,然后再分组,再对每组内的数据进行排序,直到gap为1完成排序。**希尔排序是对插入排序的优化,可以让元素跟快的交换到最终位置。

举例说明:

如下图所示,一开始是无序数组,8个元素,然后我们分为4组,gap值为4,序号1的图;然后在这四组内进行排序,实现了组内有序,序号2的图;然后我们再分组,分为6组,gap值为2,序号3的图;然后再排序,再次实现了组内有序,序号4的图;依次类推,直到gap值为1,数组就排好序了。

2.代码实现

下面看一下代码的实现:

java 复制代码
package Sorts;

import java.util.Arrays;
//希尔排序
public class XiErSort {
    public static void main(String[] args) {
        int [] arr = new int []{5,9,2,7,3,1,10};
        xiEr(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void xiEr(int arr[]){
        for (int gap = arr.length/2; gap >0 ; gap /=2) {
            for (int low = gap; low <arr.length ; low++) {
                int t = arr[low];
                int i = low - gap;
                //自右向左找插入位置,如果比待插入的元素大,则不断右移,空出插入位置
                while (i >= 0 && t < arr[i]){
                    arr[i+gap] = arr[i];
                    i-=gap;
                }
                //找到插入位置
                if(i != low-gap){
                    arr[i+gap] = t;
                }
            }
        }
    }
}

3.总结与思考

不算难,就是插入排序的一个优化,结合代码来看很好理解的。

相关推荐
Sagittarius_A*2 小时前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码
QAQo7T4 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法
千里之行,始于足下sanhai4 小时前
P8686 [蓝桥杯 2019 省 A] 修改数组 - 数字魔法大冒险 题解
c++·算法·动态规划
小星星闪亮登场4 小时前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces
计算机小白一个4 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活4 小时前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程
2601_957174656 小时前
大模型算法 简单 容易 用这个方法
算法
VALENIAN瓦伦尼安教学设备6 小时前
激光对中仪采购要点
数据库·嵌入式硬件·算法
Forever Nore7 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展
To_OC8 小时前
LC 3 无重复字符的最长子串:从入门滑动窗口到优化写法,再也不怕面试官追问
javascript·算法·leetcode