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…
Reference in new issue