快速排序算法:
思路:先划分(难点),后递归
1.找到一个数组q中间的数,x=p[l+r>>1] ,对数组分区,使得左半边所有的数<=x,右半边所有的数>=x;
2.分界点在j 递归左半边【q,l,j】,递归右半边[q,j+1,r]
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+10; 4 int n; 5 int p[N]; 6 void quick_sort(int q[],int l,int r){ 7 if(l>=r) return; 8 int x=q[l+r>>1],i=l-1,j=r+1; 9 while(i<j) 10 { 11 do i++;while (q[i]<x); 12 do j--;while (q[j]>x); 13 if(i<j) swap(q[i],q[j]); 14 } 15 quick_sort(q,l,j); 16 quick_sort(q,j+1,r); 17 } 18 int main(){ 19 cin>>n; 20 for(int i=0;i<n;i++) 21 scanf("%d",&p[i]); 22 quick_sort(p,0,n-1); 23 for(int i=0;i<n;i++) 24 printf("%d ",p[i]); 25 return 0; 26 }