快速排序
话不多说,直接看代码:
#include <iostream>
#include <cstdio>
using namespace std;
int Partion(int left,int right){
//产生一个随机数值 作为中间值
int middle = left + rand() % (right - left);
swap(arr[left],arr[middle]);
while(left < right){
while (left < right && arr[left] <= arr[right]){
right--;
}
swap(arr[left],arr[right]);
while (left < right && arr[left] <= arr[right]){
left++;
}
swap(arr[left],arr[right]);
}
return left;
}
/**
* 利用快排来找第k个大的数字
*/
int QuickSort(int left,int right,int k){
if(left < right){
int povit = Partion(left,right);
QuickSort(left,povit-1,1);
QuickSort(povit+1,right,1);
}
}
/**
* 快速排序的算法实现
*/
int main(){
int n;
while(scanf("%d",&n)!= EOF){
for (int i = 0; i < n; ++i) {
scanf("%d",&arr[i]);
}
int k;
scanf("%d",&k);
printf("%d\n",QuickSort(0,n-1,k));
for (int j = 0; j < n; ++j) {
printf("%d ",arr[j]);
}
}
}