偶然间刷到一个题目,讲的是快速排序的变种,回想快速排序,发现不能瞬间想出来代码(因为经常用库函数排序了),所以今天特来加深下印象!,对应的还有左右交换法
直接上代码:
#include <bits/stdc++.h>
#define ll long long
#define ssm stringstream
#define Swap(a,b) {int t = a;a = b;b = t;}
using namespace std;
int a[10] = {2,3,7,5,1,6,9,7,0,11}; //待排序的序列
int n = 10;
int Pos(int l,int r){ //寻找位置(确切的位置)
int x = a[l];
int i = l,j = r;
while(i<j){
while(i<j && a[j]>=x) j--;
a[i] = a[j];
while(i<j && a[i] <= x) i++;
a[j] = a[i];
}
a[i] = x;
return i;
}
void QuickSort(int l,int r){ //分治递归排序左右两边
if(l < r){
int pos = Pos(l,r);
QuickSort(l,pos-1);
QuickSort(pos+1,r);
}
}
int main(){
QuickSort(0,9);
for(int i =0;i<10;++i)
cout<<a[i]<<' ';
return 0;
}