动态数组按顺序打印

时间:2011-03-24 17:00:38

标签: c arrays

我需要按照从大到小的顺序打印一个数组。为简单起见,我们会说它是一个整数数组。

我能想到的唯一方法就是遍历数组,找到最大的元素,打印它并设置一个相应的布尔标志,这样就不会打印两次。有没有更好的方法来解决这个问题?

int *array;

// Fill array, malloc, all that good stuff

int i, j, max = 0, max_index = 0;
int isPrinted[ARRAY_SIZE] = {0};

for (i = 0; i < ARRAY_SIZE; i++) {
  for (j = 0; j < ARRAY_SIZE; j++) {
    if (isPrinted[j] == 0 && array[j] > max) {
      max = array[j];
      max_index = j;
    }  
  }
  isPrinted[max_index] = 1;
  printf("%d", max);
  max = 0;
}

6 个答案:

答案 0 :(得分:3)

是..在打印前排出数组,然后打印出来。 如果您无法修改原始数组,请将元素复制到另一个元素,然后按正确顺序插入它们并打印第二个元素。

答案 1 :(得分:1)

您不能对数组进行排序然后打印吗?或者复制数组,对副本进行排序并打印出来?使用您的算法,复杂性会更好(O(n log(n))而不是O(n ** 2)。

答案 2 :(得分:1)

对其进行排序,然后打印出来。对于整数,可以在线性时间内完成此操作。使用标准qsortO(n*log(n))

// stdlib.h
void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) ); 

答案 3 :(得分:0)

我认为你最好选择一种排序算法,按照你想要的方式重新排序你的数组。然后按顺序打印数组的内容。

答案 4 :(得分:0)

如果您可以更改元素的顺序,则可以在打印前对阵列使用排序算法。

答案 5 :(得分:0)

正如其他人所指出的那样,首先对数据进行排序通常会更有效。

但是,您可以将数据放入优先级队列,并将项目从优先级队列中删除,而不是对数据进行完全排序。虽然它不是巨大的差异(无论如何),但与完全排序数据相比,这确实减少了工作量。

相关问题