堆排序`
void adjust(int *s,int index,int len){
int left = 2*index+1;
int right = 2*index+2;
int vis = index;
if(left<len&&s[left]>s[vis]) vis = left;
if(right<len&&s[right]>s[vis]) vis = right;
if(index!=vis){
swap(s[index],s[vis]);
adjust(s,vis,len);
}
}
//堆排序
void heapSort(int s[],int len){
for(int i=len/2-1;i>=0;i--)
adjust(s,i,len);//建立大顶堆
//调整大顶堆
for(int i=len-1;i>=1;i--){
swap(s[0],s[i]);//获取最大元素,放到最后
adjust(s,0,i);
}
快速排序
void quickSort(int a[],int first,int last)
{
if(first>last)
{
return;
}
else{
int privot=partition(a,first,last);
quickSort(a,first,privot-1);
quickSort(a,privot+1,last);
}
}
int partition(int a[],int first,int last)
{
int i=first,j=last;
while(i<j)
{
while(i<j&a[i]<=a[j])
j--;
if(i<j)
{
swap(a[i],a[j]);
count++;
i++;
}
while(i<j&&a[i]<=a[j])
i++;
if(i<j)
{
swap(a[i],a[j]);
count++;
j--;
}
}
return i;
}