排序算法 之 (希尔排序)
10.2、希尔排序
希尔排序的思想就是直接插入排序的升级版本;
把待排序的数组元素分为n个部分,对每个部分进行直接插入排序,然后把n减小继续重复,直到n=1时候,再进行n=1这一次就可以结束了。
注意:希尔排序不具备稳定性。
希尔排序的图示
希尔排序的代码实现
#include <stdio.h> #include <stdlib.h> #define boolean int #define false 0; #define true 1; //希尔排序:nums:待排序数组,length:数组长度 boolean ShellSort(int nums[],int length){ if(length == 0) return false; int temp; for(int d = length/2;d >= 1;d = d/2){//希尔排序的次数 for(int i = d;i < length;i++){//每次排序 if(nums[i-d] > nums[i]){ temp = nums[i]; int j; for(j = i-d;j >= 0 && temp < nums[j];j -= d ){//根据步长依次往后移动 nums[j+d] = nums[j]; } nums[j+d] = temp; } } } return true; } int main(){ int nums[] = {49,38,65,97,76,13,27}; int length = 7; printf("希尔排序前:"); for(int i = 0; i < length ;i++){ printf("%d ",nums[i]); } ShellSort(nums,length); printf("\n"); printf("希尔排序后:"); for(int i = 0; i < length ;i++){ printf("%d ",nums[i]); } return 0; } //结果: 希尔排序前:49 38 65 97 76 13 27 希尔排序后:13 27 38 49 65 76 97
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)