#include<iostream>
#include<stdio.h>
using namespace std;
int a[10]={2,5,8,1,3,4,10,9,7,45};//待排序的数组
int b[11]={-1,2,5,8,1,3,4,10,9,7,45};//待排序的数组
//快速排序
void QuikSort(int A[],int begin,int end){
if(begin>=end)
return;
int temp=A[begin];
int i=begin,j=end;
while(i<j){
for(;j>i;j--)
if(A[j]<temp){
A[i]=A[j];
break;
}
for(;i<j;i++)
if(A[i]>temp){
A[j]=A[i];
break;
}
}
A[i]=temp;
QuikSort(A,begin,i);
QuikSort(A,i+1,end);
}
//堆排序
//初始建堆
void Heap_adjust(int H[],int s,int m){
int j=s,k=2*j;
H[0]=H[j];
for(k=2*j;k<=m;k=2*k){
if(k<m && (H[k+1]>H[k]))
k++;
if(H[k]>H[0]){
H[j]=H[k];
j=k;
}
else
break;
}
H[j]=H[0];
}
//堆排序完整算法
void Heap_Sort(int length){
int j;
for(j=10/2;j>0;j--)
Heap_adjust(b,j,length);
for(j=10;j>=1;j--){
b[0]=b[1];
b[1]=b[j];
b[j]=b[0];
Heap_adjust(b,1,--length);
}
}
int main(){
printf("带排序原数组:{2,5,8,1,3,4,10,9,7,45}\n");
QuikSort(a,0,9);
printf("快排结果如下:\n");
for(int i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
int length=10;
Heap_Sort(length);
printf("堆排序结果如下:\n");
for(int i=1;i<=10;i++)
printf("%d ",b[i]);
printf("\n");
return 0;
}
堆排序 与 快速排序
最新推荐文章于 2024-02-25 16:24:46 发布