数组从大到小排序,并返回他们原先在数组的下标位置
排序好排,但是将其下标返回该如何实现?
比如a[]={ 5,1,3,4,2}
排序完后应该是a[]={1,2,3,4,5},
而其下标在原数组中位b[]={1,4,2,3,0}
[解决办法]
a[] 中不要只存数据,定义一个结构体
struct Data
{
int m_data;
int m_index;
};
其中存数据及原始下标。
原始数据应该是一个Data的结构体
Data origData[];
for (int i=0; i<5; i++)
{
origData[i].m_data = a[i];
origData[i].m_index = i;
}
对origData排序,每次交换对是交换整个Data结构体
[解决办法]
如果你是要生成你这里写的这么一个数组b
那么你在排序时候生成它就好了
[解决办法]
可以定义个结构体
或者再定一个数组,值为1~n,原数组做排序时如何变化的,该数组也做相应变化就行了
[解决办法]
#include<stdio.h>#include<stdlib.h>int my_sort(int src[], int size, int index[]){ int i, j; if (src == NULL || index == NULL) return 0; for (i = 0; i < size - 1; i++) { for (j = i + 1; j < size; j++) { if (src[j] < src[i]) { int tmp = src[j]; src[j] = src[i]; src[i] = tmp; tmp = index[i]; index[i] = index[j]; index[j] = tmp; } } } return 1;}int main(){ int i; int src[] = { 5,1,3,4,2}; int index[sizeof(src) / sizeof(src[0])]; for (i = 0; i < sizeof(src) / sizeof(src[0]); i++) index[i] = i; if (my_sort(src, sizeof(src) / sizeof(src[0]), index)) { for (i = 0; i < sizeof(src) / sizeof(src[0]); i++) { printf("%d\t%d\n", src[i], index[i]); } } system("pause"); return 0;}
[解决办法]
用结构体比较直观。
struct pair
{
int m;
int index;
};
[解决办法]
#include<stdio.h>#include<stdlib.h>int my_sort(int src[], int size, int index[]){ int i, j; if (src == NULL || index == NULL) return 0; for (i = 0; i < size - 1; i++) { for (j = i + 1; j < size; j++) { //if (src[j] < src[i]) if ( src[ index[j] ] < src[ index[i] ] ) { int tmp = index[i]; index[i] = index[j]; index[j] = tmp; } } } return 1;}int main(){ int i; int src[] = { 5,1,3,4,2}; int index[sizeof(src) / sizeof(src[0])]; for (i = 0; i < sizeof(src) / sizeof(src[0]); i++) index[i] = i; if (my_sort(src, sizeof(src) / sizeof(src[0]), index)) { for (i = 0; i < sizeof(src) / sizeof(src[0]); i++) { printf("%d\t%d\n", src[ index[i] ], index[i]); } } system("pause"); return 0;}