#include"iostream"
#include"cstdlib"
using namespace std;
const int MAXN = 199;
int arr[MAXN];
int n;
void swap(int i,int j){
int t = arr[i];arr[i] = arr[j];arr[j] = t;
}
void quick_sort(int left,int right){
if(left>=right){
return;
}
int i=left,j=right;
int base = arr[left];
while(i!=j){
/*
从小到大排序
先从后往前找小的,然后从前往后找大的
1表示找到 0表示未找到符合的元素
j要找小于基准(s),i要找大于基准(b)
-------------
| j1 | i1 |i<j swap ib js==>is jb
| j1 | i0 |i==>j:i=j break js:is swap(i,left)
| j0 | None |j==>i:j=i break ----> before j1 i1 is jb==>is js swap(i,left)
| j0 | None |j==>i:j=i break ----> brfore None None j=i=left swap(left,left)<=>swap(i,left)
-------------
-------------
| i1 | j1 |i<j swap ib js ==> is jb
| i1 | j0 |j==>i:i=j break ib:jb swap(i-1/j-1,left)
| i0 | None |i==>j:i=j break ----> before j1 i1 is jb==>ib jb swap(i-1/j-1,left)
| i0 | None |i==>j:i=j break ----> before None None j=i=right all small swap(right/i/j,left)
-------------
*/
while(arr[j]>=base&&i<j) j--;
while(arr[i]<=base&&i<j) i++;
if(i<j){
swap(i,j);
}
}
swap(i,left);
quick_sort(left,i-1);
quick_sort(i+1,right);
}
int main(){
while(cin>>n){
for(int i=0;i<n;i++) arr[i]=rand();
for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;
quick_sort(0,n-1);
for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;
}
}
#include"iostream"
#include"cstdlib"
using namespace std;
const int MAXN = 199;
int arr[MAXN];
int n;
void swap(int i,int j){
int t = arr[i];arr[i] = arr[j];arr[j] = t;
}
int Partition(int left,int right){
int base = arr[left];
while(left<right){
while(arr[right]>=base&&right>left) right--;
arr[left]=arr[right];
while(arr[left]<=base&&right>left) left++;
arr[right]=arr[left];
}
arr[left]=base;
return left;
}
void quick_sort(int left,int right){
if(left<right){
int parti = Partition(left,right);
quick_sort(left,parti-1);
quick_sort(parti+1,right);
}
}
int main(){
while(cin>>n){
for(int i=0;i<n;i++) arr[i]=rand();
for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;
quick_sort(0,n-1);
for(int i=0;i<n;i++) cout<<arr[i]<<" ";cout<<endl;
}
}
快速排序
最新推荐文章于 2022-05-01 09:00:00 发布