【算法】【排序】【插入类】希尔排序 ShellSort
#include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ int a[15]; //设立随机数 srand(time(0)); for(int i=0;i<15;i++){ a[i]=rand()%(30); //随机数范围0到29之间 } //数组a的大小 int size=sizeof(a)/4; //打印数组信息 for(int i=0;i<size;i++){ printf("%d ",a[i]); } void ShellSort(int a[],int size); ShellSort(a,size); return 0; } void ShellSort(int a[],int size){ int all=size; int l=size; //比较距离 :距离l //交换两个地址的值 void swap(int* i,int* j); while(true){ //比较距离减半 //若比较距离为0,退出循环 l=l/2; if(l==0){ break; } //输出比较距离的值 printf("\n%d\n",l); //向右比较 for(int i=0;i<all-l;i++){ //如果遇到小的值x在右边 if(a[i]>a[i+l]){ //先把当前位置的值和x交换 swap(a+i,a+i+l); //如果 当前位置 在当前比较距离下 曾被比较过 if(i-l>=0){ //那么还要从此位置开始向左比较 for(int j=i;j-l>=0;j=j-l){ //直到x移动到合适的位置: *(dx-l)<*dx<*(dx+l) if(a[j]<a[j-l]){ swap(a+j,a+j-l); }else{ //由于前面的位置已经排序过了,若遇到比x小的数就表示到达合适位置 goto leftend; } } } leftend:{} } } //打印数组信息 for(int i=0;i<size;i++){ printf("%d ",a[i]); } } } void swap(int* i,int* j){ int t=*j; *j=*i; *i=t; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix