这个C排序数组功能出了什么问题?

时间:2016-02-23 15:36:53

标签: c arrays sorting pointers

这是我的函数代码,它将对作为指针传入的数组进行排序:

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

void sortArray(int * numbers, unsigned int n, unsigned int descendFlag);

int main(int argc, char ** argv) {

    int numArray[4] = {14, 4, 16, 12};      
    int * arrayPtr = numArray;

    int x;
    for (x = 0; x < 4; x++) {
        printf("%i\n", numArray[x]);
    }

    printf("\n\n\n");           

    sortArray(arrayPtr, 4, 1);

    for (x = 0; x < 4; x++) {
        printf("%i\n\n", numArray[x]);
    }

    printf("\n\n\n");

    sortArray(arrayPtr, 4, 0);

    for (x = 0; x < 4; x++) {
        printf("%i\n\n", numArray[x]);
    }       
    return 0;
}

void sortArray(int * numbers, unsigned int n, unsigned int descendFlag) {
    int i, j;
    for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            // Ascending
            if (descendFlag != 1 && numbers[i] > numbers[j]) {
                int temp = numbers[i];
                numbers[i + 1] = numbers[i];
                numbers[i] = temp;
            }

            if (descendFlag == 1 && numbers[i] < numbers[j]) {
                int temp = numbers[i];
                numbers[i + 1] = numbers[i];
                numbers[i] = temp;  
            }
        }
    }
}

这是该计划的输出:

14
4
16
12



14

14

14

12




14

14

14

14

这里出了什么问题?我也正确使用指针吗?

我是C的新生,指针太混乱了。我不知道我是否应该使用&*来访问作为指针传递的变量。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在jif (descendFlag == 1 && numbers[i] < numbers[j]) 之间进行比较

i

然后与i + 1int temp = numbers[i]; numbers[i + 1] = numbers[i]; numbers[i] = temp; 进行交换..

int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;

交换您比较的位置元素

descendFlag != 1

其他比较和交换(int * arrayPtr = numArray;

也是如此

您不需要此变量

numArray

sortArray(numArray, 4, 0); 可以像这样直接使用

{{1}}

由于数组的名称是该数组的基址。