我知道如何对数组进行排序(即冒泡排序),但我不知道如何根据第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
,这将涉及整数除法和模运算符。