快排 快速排序 qsort quicksort C语言
现在网上搜到的快排和我以前打的不太一样,感觉有点复杂,我用的快排是FreePascal里/demo/text/qsort.pp的风格,感觉特别简洁。
1 #include<stdio.h> 2 #define MAXN 10000 3 int a[MAXN]; 4 int n; 5 void Mysort(int l, int r) { 6 int x,y,mid,t; 7 mid = a[(l+r)/2]; 8 x=l; 9 y=r; 10 do { 11 while(a[x]<mid)x++; 12 while(a[y]>mid)y--; 13 if(x<=y) { 14 t=a[x]; 15 a[x]=a[y]; 16 a[y]=t; 17 x++; 18 y--; 19 } 20 } while(x<=y); 21 if(l<y)Mysort(l,y); 22 if(x<r)Mysort(x,r); 23 } 24 int main() { 25 int i; 26 scanf("%d",&n); 27 for(i=0; i<n; i++) { 28 scanf("%d",&a[i]); 29 } 30 Mysort(0,n-1); 31 for(i=0; i<n; i++)printf("%d ",a[i]); 32 return 0; 33 }
(其中(x+y)/2可以写成(x+y)>>1提升速度
(最近要实习生面试了,复习一下基础算法。之前排序基本都用STL的sort了,快排都快忘了,没想到我还是一遍就打出来了蛤铪哈
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。