Add 堆排序

master
p7fg2kejh 4 years ago
parent 1eacb8d866
commit 637d62afcb

@ -0,0 +1,71 @@
//堆排序
#include<stdio.h>
#define N 100
void adjust(int data[],int i,int len)
{
int k;
int temp;
temp = data[i];//temp = 6
for(k = i * 2 + 1;k < len;k = k * 2 + 1)//4 6 8 5 9 i = 1 -> k = 3
{
if(k + 1 < len && data[k] < data[k + 1])//k = 2
{
k ++;
}
if(data[k] > temp) // 8 > 6
{
data[i] = data[k];//i = 1 4 8 8 5 9
i = k;// i = 2
}
else
break;
}
data[i] = temp;// data[2] = 6; 4 8 6 5 9
}
void sort(int data[],int n)
{
int i;
int temp;
for(i = n / 2 - 1;i >= 0;i --)
{
adjust(data,i,n);
}
for(i = n - 1;i >= 1;i --)
{
temp = data[0];
data[0] = data[i];
data[i] = temp;
adjust(data,0,i);
}
}
int main()
{
int i;
int n;
int data[N];
scanf("%d",&n);
for(i = 0;i < n;i ++)
{
scanf("%d",&data[i]);
}
printf("排序前的数据为:\n");
for(i = 0;i < n;i ++)
{
printf("%d ",data[i]);
}
printf("\n");
sort(data,n);
printf("排序后的结果为:\n");
for(i = 0;i < n;i ++)
{
printf("%d ",data[i]);
}
printf("\n");
return 0;
}
Loading…
Cancel
Save