快排 快速排序 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了,快排都快忘了,没想到我还是一遍就打出来了蛤铪哈

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。