醋溜梅子 2022-06-21 17:23 采纳率: 50%
浏览 59
已结题

两个排序代码运行不出来,但没有报错。

img


按属性二,进行排序。
代码一

#include <stdio.h>
#include <stdlib.h>

typedef struct PX
{
    char *data;      //数据项
    int key;         //关键字项
}PX;

int main()
{
    int i,j;
    PX *a[8]={{"无",0},{"A",12},{"0",2},{"0",35},{"B",22},{"A",70},{"B",13},{"B",53}};
    for(i=2;i<8;++i)
    {
        if(a[i]->key<a[i-1]->key)
        {
            a[0]=a[i];                              //将待插人的记灵暂存到监视哨中
            a[i]=a[i-1];                           //a[1-1]后移
            for(j=i-2; a[0]->key<a[j]->key;--j)       //从后向前寻找插入位置
            {
                a[j+1]=a[j];                        //记录逐个后移,直到找到插入位置
            }
            a[j+1]=a[0];                            //将a[0]即原a[i],插入到正确位置
        }
    }
    for(i=1;i<8;i++)
    {
        printf("%c\t",a[i]->data);
    }
}

代码二


#include <stdio.h>
#include <stdlib.h>

typedef struct PX
{
    char *data;      //数据项
    int key;         //关键字项
}PX;

int main()
{
    int i,j,k;
    PX *a[8]={{"无",0},{"A",12},{"0",2},{"0",35},{"B",22},{"A",70},{"B",13},{"B",53}},*t;
    for(i=1;i<8;++i)
    {
        k=i;
        for(j=i+1;j<=8;++j)
        {
            if(a[j]->key<a[k]->key)
            {
                k=j;
            }
        }
        if(k!=i)
        {
            t=a[i];
            a[i]=a[k];
            a[k]=t;
        }
        printf("%c\t",a[i]->data);
    }
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 天际的海浪 2022-06-21 18:18
    关注

    数组不要用指针,

    img

    你题目的解答代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct PX
    {
        char *data;      //数据项
        int key;         //关键字项
    }PX;
    
    int main()
    {
        int i,j;
        PX a[8]={{"无",0},{"A",12},{"0",2},{"0",35},{"B",22},{"A",70},{"B",13},{"B",53}};
        for(i=2;i<8;++i)
        {
            if(a[i].key<a[i-1].key)
            {
                a[0]=a[i];                              //将待插人的记灵暂存到监视哨中
                a[i]=a[i-1];                           //a[1-1]后移
                for(j=i-2; a[0].key<a[j].key;--j)       //从后向前寻找插入位置
                {
                    a[j+1]=a[j];                        //记录逐个后移,直到找到插入位置
                }
                a[j+1]=a[0];                            //将a[0]即原a[i],插入到正确位置
            }
        }
        for(i=1;i<8;i++)
        {
            printf("%s\t",a[i].data);  //字符串要朋%s
        }
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 修改了问题 6月21日
  • 创建了问题 6月21日