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