【问题标题】:Problems with sorting algorithm (descending order) in CC中的排序算法(降序)问题
【发布时间】:2020-06-22 10:55:15
【问题描述】:

我有一个函数,我希望能够按降序对数组进行排序。该函数将数组作为参数,数组的长度始终为 10。这是我的代码:

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

void printHighScore(int *highScore){
    int i, j;
    int temp;

    for (i = 0; i < 10; i++){
        for (j = i + 1; j < 10; j++){
            if(highScore[i] < highScore[j]){

                temp = highScore[i];
                highScore[i] = highScore[j];
                highScore[j] = temp;
            }
        }
    }
    printf("1: %d\n2: %d\n3: %d\n4: %d\n5: %d\n", highScore[0], highScore[1], highScore[2], highScore[3], highScore[4]);

}


int main(){
    int *highScore[10] = {1,2,3,4,5,6,7,8,9,10};
    printHighScore(highScore);
    return 0;
}

我希望输出如下:

1:10
2:9
3:8
4:7
5:6

因为这些是数组的最大值。但是,我得到以下输出:

1:5
2:4
3:3
4:2
5:1

这里出了什么问题?

【问题讨论】:

    标签: c arrays sorting


    【解决方案1】:

    main,你有:

    int main(){
        int *highScore[10] = {1,2,3,4,5,6,7,8,9,10};
        printHighScore(highScore);
        return 0;
    }
    

    highScore 的声明错误。您已经声明了一个指针数组,而不是一个整数数组。编译代码时应该收到警告,因为它向printHighScore 传递了不正确的指针类型。将声明更改为:

        int highScore[10] = {1,2,3,4,5,6,7,8,9,10};
    

    这应该可以解决问题。

    您看到您所做的事情的原因是由于您的平台上的指针大于整数。结果,当解释为整数数组时,您有1, 0, 2, 0, 3, 0, ...(假设是小端架构)。所以你只对数组的一半进行排序,结果是 5 ... 1 后跟五个零。

    通常,您应该始终注意警告,尤其是有关不兼容指针类型的警告。它们几乎都是错误,通常很容易修复。

    【讨论】:

    • 哦,我现在明白了。非常感谢您的快速答复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多