我们可以用冒泡,快排,选择等排序方法实现数组排序,但是有时候我们不想改变数组顺序,只是想知道它的顺序,然后将其下标输出,应该怎么实现呢?
简单例子:
int num[] = {9, 10, 7, 2, 8, 3, 4, 5, 1, 6};
int flag[10]; //依次存放从大到小的元素值对应的下标,例如flag[0]存10的下标1
for (int j = 0; j < 10; j++) {
int max = 0, min = 0;
for (int i = 0; i < 10; i++) {
if(num[i] > num[max]) {
max = i;
}
if(num[i] < num[min]) {
min = i;
}
}
printf("%d %d %d\n", max, min, num[min]);
flag[j] = max;
num[max] = num[min] - 10;
printf("%d\n", num[max]);
}
for (int i = 0; i < 10; i++) { //将flag依次遍历即可得到值从大到小的下标
printf("%d ", flag[i]);
}
将下面的代码写成函数xiaBiao_sort:
void xiaBiao_sort(int num[], int n) {
int flag[n];
for (int j = 0; j < n; j++) {
int max = 0, min = 0;
for (int i = 0; i < n; i++) {
if(num[i] > num[max]) {
max = i;
}
if(num[i] < num[min]) {
min = i;
}
}
flag[j] = max;
num[max] = num[min] - 10;
}
for (int i = 0; i < 10; i++) {
printf("%d ",flag[i]);
}
}