首先把我根据百度百科里面的C语言版快速排序的理解写出来:
void qsort2(int *l,int left,int right){ if(left>=right) return; int i=left,j=right,t; t=l[left]; while(i<j){ for(;l[j]>=t && i<j;j--) ; l[i]=l[j]; for(;l[i]<=t && i<j;i++) ; l[j]=l[i]; } l[i]=t; qsort2(l,left,i-1); qsort2(l,i+1,right); }
这个里面我在理解的时候发现在两个for循环中间如果i==j了,那么还是会有个赋值操作,所以我加了一个判断如下:
void qsort2(int *l,int left,int right){ if(left>=right) return; int i=left,j=right,t; t=l[left]; while(i<j){ for(;l[j]>=t && i<j;j--) ; if(i==j) break; l[i]=l[j]; for(;l[i]<=t && i<j;i++) ; l[j]=l[i]; } l[i]=t; qsort2(l,left,i-1); qsort2(l,i+1,right); }
这样就不会在i==j的时候在做赋值操作了。
下面是C语言程序设计中第四章的快速排序:
void qsort(int *l,int left,int right){ int i,last; void swap(int *v,int i,int j); if(left>=right) return; swap(l,left,(left+right)/2); last=left; for(i=left+1;i<=right;i++) if(l[left]>l[i]){ swap(l,++last,i); } swap(l,left,last); qsort(l,left,last-1); qsort(l,last+1,right); } void swap(int *l,int i,int j){ int temp; temp=l[i]; l[i]=l[j]; l[j]=temp; }
这个我理解了好久,后来发现这个程序在last+1=i的时候还有swap(l,++last,i)这个操作,我添加了一段代码:
void qsort(int *l,int left,int right){ int i,last; void swap(int *v,int i,int j); if(left>=right) return; swap(l,left,(left+right)/2); last=left; for(i=left+1;i<=right;i++) if(l[left]>l[i]){ if(last+1==i){ last++; continue; } swap(l,++last,i); } swap(l,left,last); qsort(l,left,last-1); qsort(l,last+1,right); }
这样修改完成后,经过我的测试时没有问题的,上面写的都是比较简单的快速排序,第二个算法要比第一个好些(从某种程度来讲),实际的快速排序涉及到了很多算法与数据结构的知识,我还在学习。等学有所成之后会在回来分析这个问题。
最后把我用来检验排序的main函数也贴出来吧:
int main(int argc, char const *argv[]) { /* code */ int v[]={1,2,4,1,2,8,5},n=7,i; for(i=0;i<n;i++) printf("%d ",v[i] ); printf("\n"); qsort(v,0,n-1); for(i=0;i<n;i++) printf("%d ",v[i]); return 0; }
【推荐】国内首个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