陣列排序,返回陣列值在原陣列中的下標(序號) .
功能:對輸入的陣列進行排序,返回的是,從小到大陣列對應於原陣列的下標(序號) 。比如 1 7 3 2 9 返回:0 3 2 1 4
思想:在函式中動態開闢一個數組,用於儲存下標。初始化的時候為0-(n-1)。陣列值在排序的過程中,下標值也跟著排序。最後返回指向下標陣列的指標。
#include<stdio.h>
#include<malloc.h>
int *sortindex(int a[],int n)
{
int *p;
int temp;
p=(int*)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
p[i]=i;
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
for(i=0;i<n;i++)
printf("%3d",p[i]);
printf("\n");
return p;
free(p);
}
void main()
{
int a[5]={1,7,3,2,9};
int *p;
for(int i=0;i<5;i++)
printf("%3d",a[i]);
printf("\n");
p=sortindex(a,5);
for(i=0;i<5;i++)
printf("%3d",p[i]);
printf("\n");
}
執行結果:
1 7 3 2 9
0 3 2 1 4
0 3 2 1 4