1. 程式人生 > >陣列排序,返回陣列值在原陣列中的下標(序號) .

陣列排序,返回陣列值在原陣列中的下標(序號) .

功能:對輸入的陣列進行排序,返回的是,從小到大陣列對應於原陣列的下標(序號) 。比如 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