快排与堆排
很长时间不写程序了,手都生了
#include <iostream>
#include <algorithm>
using namespace std;
void quicksort(int *a,int s,int e){
if(s>=e)return;
int m = s+(e-s)/2;
int i=s;
int j=e;
int pivot = a[m];
while(i<=j){
if(a[i]>=pivot){
swap(a[i],a[j--]);
}
else
i++;
}
quicksort(a,s,i-1);
quicksort(a,i,e);
}
void max_heaptify(int* a,int i,int size){
int left = 2*i+1;
while(left<size){
if(left+1<size){
if(a[left+1]>a[left]){
left++;
}
}
if(a[left]>a[i]){
swap(a[left],a[i]);
i=left;
left=2*left+1;
}
else
break;
}
}
void heap_sort(int* a,int size){
for(int i=size/2;i>=0;--i)
max_heaptify(a,i,size);
for(int i=size-1;i>0;--i){
swap(a[i],a[0]);
max_heaptify(a,0,i);
}
cout<<endl;
}
int random(int*a,int size){
for(int i=0;i<size;++i){
a[i]=i;
}
random_shuffle(a,a+size-1);
}
int print(int*a,int size){
for(int i=0;i<size;++i){
//cout<<"a["<<i<<"]:"<<a[i]<<" ";
cout<<a[i]<<" ";
}
cout<<endl;
}
int main(){
const int size = 500;
int a[size];
random(a,size);
print(a,size);
heap_sort(a,size);
print(a,size);
random(a,size);
quicksort(a,0,size-1);
print(a,size);
return 0;
}