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

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;
}

数组不要用指针,

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


#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);
    }
    return 0;
}


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

typedef struct PX
{
    char data[3];      //数据项
    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("%s\t",a[i].data);
    }
    return 0;
}



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

typedef struct PX
{
    const 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}};
    //a是指针类型数组,里面应该放的是{"无"0}的地址才对
    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++)
    {
        //data是字符串类型,应该用%s
        printf("%s\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("%s\t",a[i].data);
    }
    return 0;
}