关于数在数组中的位置
题目是随意写出一个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; }