C/C++ code#include
#include
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;
};
------解决方案--------------------探讨
可以使用结构体,前面大家都提到了,我这里使用另外一种方法:
C/C++ code
#include
#include
int my_sort(int src[], int size, int index[])
{
int i, j;
if (src == NULL || index == NULL)
……
------解决方案--------------------
8楼的思路其实和结构体是一回事。
改进了一下:
C/C++ code#include
#include
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;
}