如何解决其他数组中的排序数组,但只有索引
我有一个小问题,我有一个数组:
int tab[] = {7,2,6,1,8,5,3,7,2} //index: 0-9
及其it索引=值:
0 = 7,1 = 2,2 = 6,3 = 1,4 = 8,5 = 1,6 = 5,7 = 3,8 = 7,9 = 2,
我想在第二个数组中有第一个数组的排序索引。
int tab2应该是:index = value(第一个数组的索引但已排序):
0 = 3,1 = 5,2 = 1,3 = 9,4 = 7,5 = 6,6 = 2,7 = 0,8 = 8,9 = 4,
我有一个代码可以快速排序,但是它不会对第一个数组进行排序,而是在第二个数组中写一个排序后的索引。
void quicksort(int *tab,int p,int q,int *tb){
int v=tab[p];
int i,j,x;
i=p;
j=q;
do
{
while(tab[i]<v) i++;
while(tab[j]>v) j--;
if(i<=j)
{
x=tab[i];
tab[i]=tab[j];
tab[j]=x;
i++;
j--;
}
}
while(i<=j);
if(j>p) quicksort(tab,p,tb);
if(i<q) quicksort(tab,i,q,tb);
}
解决方法
如果使用哪种排序算法并不重要,那么最简单的方法之一就是使用插入排序。
例如
#include <stdio.h>
void insertion_sort( const int a[],size_t n,size_t b[] )
{
for ( size_t i = 0; i < n; i++ )
{
size_t j = i;
for ( ; j != 0 && a[i] < a[b[j-1]]; --j )
{
b[j] = b[j-1];
}
b[j] = i;
}
}
int main(void)
{
enum { N = 10 };
int a[N] = { 7,2,6,1,8,5,3,7,2 };
size_t b[N];
insertion_sort( a,N,b );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ",a[b[i]] );
}
putchar( '\n' );
return 0;
}
程序输出为
1 1 2 2 3 5 6 7 7 8
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。