希尔排序基础理解

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

代码讲解:

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

}

相关推荐
做cv的小昊41 分钟前
【TJU】研究生应用统计学课程笔记(8)——第四章 线性模型(4.1 一元线性回归分析)
笔记·线性代数·算法·数学建模·回归·线性回归·概率论
贾斯汀玛尔斯1 小时前
每天学一个算法--倒排索引(Inverted Index)
算法·inverted-index
小e说说1 小时前
打破偏科困境:这些学习软件助孩子重燃学习热情
算法
月昤昽2 小时前
autoCAD二次开发 4.正多边形与collection区分
算法·c#·二次开发·autocad二次开发
休息一下接着来2 小时前
C++ 固定容量环形队列实现
c++·算法
im_AMBER3 小时前
手撕hot100之矩阵!看完这篇就AC~
javascript·数据结构·线性代数·算法·leetcode·矩阵
笨笨饿3 小时前
#79_NOP()嵌入式C语言中内联汇编宏的抽象封装模式研究
linux·c语言·网络·驱动开发·算法·硬件工程·个人开发
如君愿3 小时前
考研复习 Day 30 | 习题--计算机网络 第五章(运输层 上)、数据结构 图(上)
数据结构·计算机网络·课后习题
weixin_421725263 小时前
C语言中volatile关键字怎么用C语言volatile在多线程中的作用
c语言·数据结构·运算符优先级·变量命名·volatile关键字
风萧萧19994 小时前
问答样例如何在RAG问答中使用?
算法