快排
清晰的了解了快排,CLICK HERE带你了解快排
快速排序的基本思想:挖坑填数+分治法
1、先从数列中取出一个数作为基准数
2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
3、再对左右区间重复第二步,直到各区间只有一个数
1 #include<iostream>
2 using namespace std;
3
4 void Q_sort(int *a,int start,int end){
5 if(start>=end)return ;
6 int i=start;
7 int j=end;
8 int key=a[i];
9 while(i<j){
10 while(i<j&&a[j]>=key){
11 j--;
12 }
13 a[i]=a[j];
14 while(i<j&&a[i]<=key){
15 i++;
16 }
17 a[j]=a[i];
18 }
19 a[i]=key;
20 Q_sort(a,start,i-1);
21 Q_sort(a,i+1,end);
22 }
23 int main(){
24 int n,a[100];
25 cin>>n;
26 for(int i=0;i<n;i++)cin>>a[i];
27 Q_sort(a,0,n-1);/*这里的第三个参数要减1否则内存越界*/
28 for(int i=0;i<n;i++)cout<<a[i]<<" ";
29 }
以下代码为快排的另一种方法,这里小明也给不出详解,有兴趣可以了解以下,
1 #include <iostream>
2 using namespace std;
3
4 int partition(int *a,int p,int r){
5 int i=p;
6 for(int j=p;j<=r-1;j++){
7 if(a[j]<=a[r]){
8 swap(a[j],a[r]);
9 }
10 }
11 swap(a[i],a[r]);
12 return i;
13 }
14 int Q_sort(int *a,int p,int r){
15 if(p<r){
16 int q=partition(a,p,r);
17 Q_sort(a,p,q-1);
18 Q_sort(a,q+1,r);
19 }
20 }
21
22 int main()
23 {
24 int i;
25 int a[] = { 88, 1, 22, 99, 55, 77, 33, 66, 44, 70 };
26 cout << "After the quick sort,the data is:" << endl;
27 Q_sort(a, 0, 9);
28 for(int i=0;i<10;i++)cout<<a[i]<<" ";
29 cout << endl;
30
31 return 0;
32 }
明楼

浙公网安备 33010602011771号