无法使用C中的冒泡排序对字符数组进行排序

时间:2017-05-25 18:59:52

标签: c arrays sorting char bubble-sort

我正在尝试对C中的字符数组进行排序,但它会打印出相同的数组而不是排序的

char*P[5] = {"1c", "4h", "3g", "10g"};
total_items = 4; // number of elements in the array. 

for(int q =1; q<total_items; q++)
{
    for(int k=0; k<total_items-q; k++)
    {
        if((int)P[k]>=(int)P[k+1])
        {
            temp=P[k];
            P[k]=P[k+1];
            P[k+1]=temp;
        }
    }
}

当我打印出阵列时,它与原始阵列相同。我试着在if语句中打印调试;事实证明它永远不会进入代码的交换块。有什么我想念的吗?

预期输出应为1c,3g,10g,4h。

1 个答案:

答案 0 :(得分:1)

创建自己的比较功能。

像这样:

int cmp(const char *a, const char *b){
    int ai, bi;
    char ac, bc;
    sscanf(a, "%d%c", &ai, &ac);//Separate number and letter
    sscanf(b, "%d%c", &bi, &bc);
    if(ac > bc)
        return 1;
    else if(ac < bc)
        return -1;
    return ai < bi ? -1 : ai > bi;
}

然后将if((int)P[k]>=(int)P[k+1])替换为if(cmp(P[k], P[k+1]) > 0)