主题:[原创]我的堆积排序哪里出了问题???高手请进!!!
#include <stdio.h>
void adjust(int K[],int i,int n)
{
int j;
int temp;
temp = K[i];
j = 2*i+1; //j为i结点的左孩子的序号
while(j < n)
{
if(j < n-1 && K[j] < K[j+1])
j++; //j给出i结点的左,右孩子中值最大者的序号
if(temp >= K[j])
break;
K[j/2-1] = K[j]; //将某孩子结点移到父结点的位置
j = 2*j+1;
}
K[(j-1)/2] = temp;
}
void heapsort(int K[],int n)
{
int i;
int temp;
for(i = n/2-1; i >=0; i--) //初始堆积
adjust(K,i,n);
for(i = n-1; i >= 0; i--)
{
temp = K[i];
K[i] = K[0];
K[0] = temp;
adjust(K,0,i); //交换堆积的第1个元素和最后那个元素的位置
}
}
void main()
{
int K[10] = {26,5,77,1,61,11,59,15,48,19};
int i;
printf("原序列为:\n");
for(i = 0; i < 10; i++)
printf("%d ",K[i]);
printf("\n堆积排序:\n");
heapsort(K,i);
for(i = 0; i < 10; i++)
printf("%d ",K[i]);
}
编译没有错误,就是运行结果不对~~~~~~~[em10]
void adjust(int K[],int i,int n)
{
int j;
int temp;
temp = K[i];
j = 2*i+1; //j为i结点的左孩子的序号
while(j < n)
{
if(j < n-1 && K[j] < K[j+1])
j++; //j给出i结点的左,右孩子中值最大者的序号
if(temp >= K[j])
break;
K[j/2-1] = K[j]; //将某孩子结点移到父结点的位置
j = 2*j+1;
}
K[(j-1)/2] = temp;
}
void heapsort(int K[],int n)
{
int i;
int temp;
for(i = n/2-1; i >=0; i--) //初始堆积
adjust(K,i,n);
for(i = n-1; i >= 0; i--)
{
temp = K[i];
K[i] = K[0];
K[0] = temp;
adjust(K,0,i); //交换堆积的第1个元素和最后那个元素的位置
}
}
void main()
{
int K[10] = {26,5,77,1,61,11,59,15,48,19};
int i;
printf("原序列为:\n");
for(i = 0; i < 10; i++)
printf("%d ",K[i]);
printf("\n堆积排序:\n");
heapsort(K,i);
for(i = 0; i < 10; i++)
printf("%d ",K[i]);
}
编译没有错误,就是运行结果不对~~~~~~~[em10]