我知道如何对数组进行排序(即冒泡排序),但我不知道如何根据第n个术语对数组进行排序。如果可以,请给我个主意或例子吗?谢谢大家的赞赏。
@edit:程序如何感测到一个零,我的意思是1表示0001或00001...。

Example:
2 --> nth digit
4 45 62 1 900 105 --> inputs


输出:
  001 004 105 900 045 065



void bubble_sort(int iarr[], int num) {
   int i, j, k, temp;

   printf("\nUnsorted Data:");
   for (k = 0; k < num; k++) {
      printf("%5d", iarr[k]);
   }

   for (i = 1; i < num; i++) {
      for (j = 0; j < num - 1; j++) {
         if (iarr[j] > iarr[j + 1]) {
            temp = iarr[j];
            iarr[j] = iarr[j + 1];
            iarr[j + 1] = temp;
         }
      }

      printf("\nAfter pass %d : ", i);
      for (k = 0; k < num; k++) {
         printf("%5d", iarr[k]);
      }
   }
}

最佳答案

快速的答案是,您的比较函数需要查看第n个数字而不是整数。

因此,如果您的原始比较是这样的:

if (a < b)     // handle a before b case
elseif (b < a) // handle b before a case


您需要将其更改为:

aDigit = getNthDigit(a, n);
bDigit = getNthDigit(b, n);

if (aDigit < bDigit)     // handle a before b case
elseif (bDigit < aDigit) // handle b before a case


您还必须实现getNthDigit,这将涉及整数除法和模运算符。

09-28 11:08