堆排序
来源:互联网 发布:婚纱照电子相册软件 编辑:程序博客网 时间:2024/05/24 06:34
#define MAXSIZE 100
#include <stdio.h>
void print(const int *p,int len)
{
int i = 0;
for (; i < len; i++)
{
printf("%d ",p[i] );
}
printf("\n");
}
void swap(int *a,int i,int j)
{
int temp;
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
void Heap_adjust(int p[],int len,int index) //堆调整 int p[] == int *p
{
int max;
int i = index;
for ( i = index; i <= len-1 ; ++i)
{
int lcld = 2*i+1;
int rcld = 2*i+2;
if (lcld>len-1)
{
return;
}
if (rcld>len-1)
{
max = lcld;
}
else
max = p[lcld]>p[rcld]?lcld:rcld;
if (p[i]>p[max])
{
return;
}
else
swap(p,i,max);
i = max;
}
}
void Heap_sort(int *p ,int len)
{
int i,j;
for ( i = (len/2 - 1); i >= 0; i--)
{
Heap_adjust(p,len,i);
}
for(j=len-1;j>=1;j--)
{
swap(p,0,j);
Heap_adjust(p,j,0);
}
}
/*
void Heap_sort(int *p ,int len)
{
int i,j;
for ( i = (len/2 - 1); i >= 0; i--)
{
Heap_adjust(p,len,i);
}
for(j=1;j<=len-1;j++)
{
swap(p,0,len-j);
Heap_adjust(p,len-j,0);
}
}
*/
int main()
{
int a[MAXSIZE] = {0};
int len = 0;
char ch;
int num = 0;
printf("\n" );
while ((ch = getchar()) != '\n')
{
while(ch !=' '&&ch != '\n')
{
num = num*10 + ch-'0';
ch =getchar();
}
a[len++] = num;
num = 0;
if (ch == '\n')
{
break;
}
}
Heap_sort(a,len);
print(a,len);
return 0;
}
#include <stdio.h>
void print(const int *p,int len)
{
int i = 0;
for (; i < len; i++)
{
printf("%d ",p[i] );
}
printf("\n");
}
void swap(int *a,int i,int j)
{
int temp;
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
void Heap_adjust(int p[],int len,int index) //堆调整 int p[] == int *p
{
int max;
int i = index;
for ( i = index; i <= len-1 ; ++i)
{
int lcld = 2*i+1;
int rcld = 2*i+2;
if (lcld>len-1)
{
return;
}
if (rcld>len-1)
{
max = lcld;
}
else
max = p[lcld]>p[rcld]?lcld:rcld;
if (p[i]>p[max])
{
return;
}
else
swap(p,i,max);
i = max;
}
}
void Heap_sort(int *p ,int len)
{
int i,j;
for ( i = (len/2 - 1); i >= 0; i--)
{
Heap_adjust(p,len,i);
}
for(j=len-1;j>=1;j--)
{
swap(p,0,j);
Heap_adjust(p,j,0);
}
}
/*
void Heap_sort(int *p ,int len)
{
int i,j;
for ( i = (len/2 - 1); i >= 0; i--)
{
Heap_adjust(p,len,i);
}
for(j=1;j<=len-1;j++)
{
swap(p,0,len-j);
Heap_adjust(p,len-j,0);
}
}
*/
int main()
{
int a[MAXSIZE] = {0};
int len = 0;
char ch;
int num = 0;
printf("\n" );
while ((ch = getchar()) != '\n')
{
while(ch !=' '&&ch != '\n')
{
num = num*10 + ch-'0';
ch =getchar();
}
a[len++] = num;
num = 0;
if (ch == '\n')
{
break;
}
}
Heap_sort(a,len);
print(a,len);
return 0;
}
阅读全文