希尔排序基础理解

希尔排序 -> 又名步长缩短排序/分组插入排序:就是讲数组中的元素进行分组来部分部分的比较,利用步长和指针变换来确立分组的个数和大小,最后由于步长不断减小,最后还是会进行一次普通的插入排序,但是有了前面的铺垫,最后的那个数组会更加有序点

代码讲解:

#include <stdio.h>

void sort(int arr[], int n) {

//定义步长,隐式确立了大组的个数

for (int step = n / 2; step > 0; step /= 2) {

//分组方式确立的关键函数

for (int i = step; i < n; i += step) {

//提出key作为代插入元素

int key = arr[i];

//j作为比较指针,复制于i

int j = i;

//对每一组比较后移

while (j >= step && arr[j - step] > key) {

arr[i] = arr[i - step];

j -= step; //最后会影响外层循环

}

//找到插入位置,插入key

arr[j] = key;

}

}

}

void printArray(int arr[], int n) {

for (int i = 0; i < n; i++) {

printf("%d ", arr[i]);

}

}

int main() {

int arr[] = {5, 3, 1, 4, 8, 5, 3};

int n = sizeof(arr) / sizeof(arr[0]);

sort(arr, n);

printArray(arr, n);

return 0;

}

相关推荐
数据大魔方6 分钟前
【期货量化实战】跨期套利策略:价差交易完整指南(TqSdk源码详解)
数据库·python·算法·github·程序员创富
weixin_461769407 分钟前
15. 三数之和
c++·算法·leetcode·三数之和
NAGNIP9 分钟前
一文搞懂机器学习中的学习理论!
算法·面试
Evand J16 分钟前
【MATLAB代码介绍】基于累积概率的三维轨迹匹配与定位,由轨迹匹配和卡尔曼滤波形成算法,带测试结果演示
算法·matlab·滤波·定位·导航·轨迹匹配
l1t16 分钟前
NineData第三届数据库编程大赛:用一条 SQL 解数独问题我的参赛程序
数据库·人工智能·sql·算法·postgresql·oracle·数独
千金裘换酒27 分钟前
LeetCode 链表两数相加
算法·leetcode·链表
NAGNIP27 分钟前
一文搞懂机器学习中的优化方法!
算法
Sammyyyyy1 小时前
Rust 1.92.0 发布:Never Type 进一步稳定
java·算法·rust
alonewolf_991 小时前
深入解析G1与ZGC垃圾收集器:原理、调优与选型指南
java·jvm·算法
数据大魔方2 小时前
【期货量化实战】螺纹钢量化交易指南:品种特性与策略实战(TqSdk完整方案)
python·算法·github·程序员创富·期货程序化·期货量化·交易策略实战