关于快速排序

快速排序  https://www.cnblogs.com/foreverking/articles/2234225.html

这位大佬讲的很清晰易懂,就是在我写代码的时候,出了点问题。

后来才发现,基准在左边的话,要先从右边开始循环(反之,亦然)。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 
 4 using namespace std;
 5 
 6 int w[1000];
 7 void quicksort(int a[],int left,int right){
 8     //基准在左边,所以要先从右边开始执行。。唉。 
 9     int l=left,r=right,temp=a[left];
10     if(left>=right) return ;
11     while(l!=r){
12         while(l<r&&a[r]>temp) r--;
13         if(l<r)    a[l]=a[r];
14         while(l<r&&a[l]<temp) l++;
15         if(l<r) a[r]=a[l];
16         
17     }
18     a[l]=temp;
19     quicksort(a,left,l-1);
20     quicksort(a,l+1,right);
21 }
22 int main(){
23     int n;
24     scanf("%d\n",&n);
25     for(int i=0;i<n;i++) scanf("%d",&w[i]);
26     quicksort(w,0,n-1);
27     for(int i=0;i<n;i++) printf("%d ",w[i]);
28     return 0;
29 }

 

posted @ 2018-10-13 12:45  lukelmouse  阅读(166)  评论(0编辑  收藏  举报