回 帖 发 新 帖 刷新版面

主题:[原创]我的堆积排序哪里出了问题???高手请进!!!

#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]

回复列表 (共2个回复)

沙发

K[j/2-1] = K[j];改成
K[(j-1)/2] = K[j];

板凳


谢了[em2]

我来回复

您尚未登录,请登录后再回复。点此登录或注册