蓝桥杯练习024
快速排序
单向扫描
#include<iostream>
using namespace std;
void swap(int arr[],int p,int r){
int tmp=arr[p];
arr[p]=arr[r];
arr[r]=tmp;
}
int partition(int arr[],int p,int r){
int pivot=arr[p];
int sp=p+1;
int bigger=r;
while(sp<=bigger){
if(arr[sp]<=pivot){
sp++;
}else{
swap(arr,sp,bigger);
bigger--;
}
}
swap(arr,p,bigger);
return bigger;
}
void Qsort(int arr[],int p,int r){
if(p<r){
int q=partition(arr,p,r);
Qsort(arr,p,q-1);
Qsort(arr,q+1,r);
}
}
int main()
{
int arr[10]={1,5,3,4,6,78,9,7,11,33};
Qsort(arr,0,9);
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
return 0;
}
双向扫描
#include<iostream>
using namespace std;
void swap(int arr[],int p,int r){
int tmp=arr[p];
arr[p]=arr[r];
arr[r]=tmp;
}
int partition(int arr[],int p,int r){
int pivot = arr[p];
int left = p+1;
int right = r;
while(left<=right){
while(left<=right&&arr[left]<=pivot)left++;
while(left<=right&&arr[right]>pivot)right--;
if(left<=right)
swap(arr,left,right);
}
swap(arr,p,right);
return right;
}
void Qsort(int arr[],int p,int r){
if(p<r){
int q=partition(arr,p,r);
Qsort(arr,p,q-1);
Qsort(arr,q+1,r);
}
}
int main()
{
int arr[10]={1,4,2,3,6,7,1,3,2,2};
Qsort(arr,0,9);
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
return 0;
}