希尔排序基础理解

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

代码讲解:

#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 = arri;

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

int j = i;

//对每一组比较后移

while (j >= step && arrj - step > key) {

arri = arri - step;

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

}

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

arrj = key;

}

}

}

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

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

printf("%d ", arri);

}

}

int main() {

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

int n = sizeof(arr) / sizeof(arr0);

sort(arr, n);

printArray(arr, n);

return 0;

}

相关推荐
可编程芯片开发14 小时前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法
学究天人15 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷2)
算法·数学建模·动态规划·图论·抽象代数·拓扑学
玛卡巴卡ldf15 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
wanzehongsheng16 小时前
零碳产业园光伏园区光伏电站追踪对比固定:发电增益技术边界分析
算法·光伏发电·光伏·零碳园区·太阳能追光·低碳环保·追踪电站
KobeSacre16 小时前
CyclicBarrier 源码
java·jvm·算法
手写码匠16 小时前
注意力机制全家桶:从 Multi-Head 到 GQA 再到 Flash Attention 的手写实现
人工智能·深度学习·算法·aigc
学究天人17 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷3.2)
线性代数·算法·机器学习·数学建模·动态规划·抽象代数·拓扑学
Yang_jie_0317 小时前
笔记:数据结构(链队列的相关判断条件)
数据结构·笔记
tkevinjd17 小时前
力扣322-零钱兑换
算法·leetcode·动态规划
大鱼>17 小时前
AI+资产监控:农业设施智能监控系统
人工智能·深度学习·算法·机器学习