#include<stdio.h>
#include<string.h>
#define N 100
#define MaxLen 10
void sort(char *p[],int n)
{
char *t=NULL;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0){
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
int main()
{
char name[N][MaxLen]={};
char *pstr[N];
int n;
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
pstr[i]=name[i]; //指针初始化,很重要!!!
gets(pstr[i]);
}
sort(pstr,n);
puts("After sort,");
puts("The pointer arry:");
for(int i=0;i<n;i++)
puts(pstr[i]);
puts("The original arry:");
for(int i=0;i<n;i++)
puts(name[i]);
return 0;
}
指针数组并未改变原数组中元素存放的位置,只是改变了指针数组中各元素的指向(引索),所以又叫引索排序。
而移动指针比移动字符串快得多,所以引索排序效率比物理排序高得多。