关于数在数组中的位置
题目是随意写出一个10个数字的数组吗,要输出排序好以后的数组跟每个元素在原来序列中的位置。样例输入
1 2 3 5 4 6 8 9 10 7
样例输出
1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9
怎么把数组的位置保存下来。脑子越想越乱,就是想不通。。大家帮忙帮我通一下!

程序代码: int a[10]={1,2,3,5,4,8,7,6,10,9};
int b[10]={1,2,3,4,5,6,7,8,9,10};
int i,j,temp;
for(i=0;i<10;i++)
for(j=i;j<10;j++)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
程序代码:#include <stdio.h>
#include <stdlib.h>
int compare( const void* a, const void* b )
{
return *(int*)a - *(int*)b;
}
int main(void)
{
// 输入
const int arr[] = { 1, 2, 3, 5, 4, 6, 8, 9, 10, 7 };
// 构建一个包含原始位置的数组
const size_t n = sizeof(arr)/sizeof(arr[0]);
int* buf = malloc( n*2*sizeof(int) );
for( size_t i=0; i!=n; ++i )
{
buf[2*i+0] = arr[i];
buf[2*i+1] = i;
}
// 排序
qsort( buf, n, 2*sizeof(int), &compare );
// 输出结果
for( size_t i=0; i!=n; ++i )
printf( "%d%c", buf[2*i+0], " \n"[i+1==n] );
for( size_t i=0; i!=n; ++i )
printf( "%d%c", buf[2*i+1]+1, " \n"[i+1==n] );
free( buf );
return 0;
}
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct Data
{
int value;
int order;
};
const int arr[] = { 1, 2, 3, 5, 4, 6, 8, 9, 10, 7 };
void create_data_array(Data* data, const int* source);
void display_data(const Data* data, int count);
void swap_data(Data* d1, Data* d2);
int main(void)
{
Data data[_countof(arr)];
create_data_array(data, arr);
for (int i = 0; i < _countof(data) - 1; ++i)
{
for (int j = i + 1; j < _countof(data); ++j)
{
if (data[i].value > data[j].value)
{
swap_data(&data[i], &data[j]);
}
}
}
display_data(data, _countof(data));
printf_s("\npress any key to exit...");
_getch();
return EXIT_SUCCESS;
}
void create_data_array(Data* data, const int* source)
{
for (int index = 0; index < _countof(arr); ++index)
{
data[index].value = source[index];
data[index].order = index + 1;
}
}
void display_data(const Data* data, int number)
{
for (int index = 0; index < number; ++index)
{
printf_s("%4d ", data[index].value);
}
putchar('\n');
for (int index = 0; index < number; ++index)
{
printf_s("%4d ", data[index].order);
}
putchar('\n');
}
void swap_data(Data* d1, Data* d2)
{
Data temp;
temp = *d1;
*d1 = *d2;
*d2 = temp;
}

