打印两个C列一个排序

时间:2018-03-25 02:26:03

标签: c arrays sorting

我正在努力将10个数字作为用户输入,并将输入打印在两列中,并带有一个已排序的列。

#include <stdio.h>

int main(void)
{
    int NUM_ELEMENTS = 10;
    int list[NUM_ELEMENTS];
    int sortedList[NUM_ELEMENTS];
    int i, j, temp;

    printf("Enter 10 numbers:\n");
    for(i = 0; i < NUM_ELEMENTS; i++) {
        scanf("%d \n", &list[i]); {
            for(j = 0; j < NUM_ELEMENTS; j++){
                sortedList[j] = list[i];}
        }
    }

    for(i = 0; i < NUM_ELEMENTS; i++) {
        if(list[i] > sortedList[j]) {
                temp = list[i];
                sortedList[j] = temp;
                }
            }

    for(i = 0; i < NUM_ELEMENTS; ++i){
    printf("%d %d\n", list[i], sortedList[j]);
    }

return 0;

 }

第一列打印正确,但第二列不打印正确的数字。我在C编码方面相当新,似乎无法使其正常工作。我已经尝试了所提供代码的几种变体。列也应该并排并标记。

1 个答案:

答案 0 :(得分:1)

上面的代码中有很多错误。

- 首先,在扫描和分配部分时出现循环约束错误

for(i = 0; i < NUM_ELEMENTS; i++) {
        scanf("%d \n", &list[i]); {
            for(j = 0; j < NUM_ELEMENTS; j++){
                sortedList[j] = list[i];}  /* for i=0 why list[0] assigned to all sortedList[j] ?
        }
    }

替换上面的一个
for(i = 0; i < NUM_ELEMENTS; i++) {
         scanf("%d", &list[i]);
         sortedList[i] = list[i];
}

- 其次,排序逻辑根本不正确。

for(i = 0; i < NUM_ELEMENTS; i++) {
      if(list[i] > sortedList[j]) { /* what is sortedList[j] ? */
          temp = list[i];
          sortedList[j] = temp;
      }
 }

现在用简单的排序技术逻辑替换上面的一个,但是一旦基础检查性能视图变得强大,哪种排序方法更好用。

for(i = 0; i < NUM_ELEMENTS-1; i++) {
                for(j = 0;j < NUM_ELEMENTS-1-i; j++) {
                        if(sortedList[j] > sortedList[j+1]) {
                                temp = sortedList[j];
                                sortedList[j] = sortedList[j+1];/* you miss this */
                                sortedList[j+1] = temp;
                        }
                }
        }

- 最后,打印部分也有错误。

for(i = 0; i < NUM_ELEMENTS; ++i){
    printf("%d %d\n", list[i], sortedList[j]); /* what is j here ? you can use the same variable i for both. */ 
}

替换上面的一个
for(i = 0; i < NUM_ELEMENTS; ++i){
        printf("%d %d\n", list[i], sortedList[i]);
}