例10.10用选择法对10个整数排序。
程序如下:
main()
{intp,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%D",p++);
p=a;
Sort(p,10);
for(p=a,i=0;i<10;i++)
{printf("%D",*p);p++;}
}
sort(int x[ ],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[k]) k=j;
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
为了便于理解,函数Sort中用数组名作为形参,用下标法引用形参数组元素,这样的程序很容易看懂。当然也可以改用指针变量,这时Sort函数的首部可以改为
sort(intx,int n)
其他不改,程序运行结果不变。可以看到,即使在函数Sort中将x定义为指针变量,在函数中仍可用x[i]、x[k]这样的形式表示数组元素,它就是x+i和x+k所指的数组元素。它等价于
sort(int *x,int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(*(x+j)>*(x+k)) k=j;
if(k!=i)
{t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;
}
}
}
程序如下:
main()
{intp,i,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%D",p++);
p=a;
Sort(p,10);
for(p=a,i=0;i<10;i++)
{printf("%D",*p);p++;}
}
sort(int x[ ],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[k]) k=j;
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
为了便于理解,函数Sort中用数组名作为形参,用下标法引用形参数组元素,这样的程序很容易看懂。当然也可以改用指针变量,这时Sort函数的首部可以改为
sort(intx,int n)
其他不改,程序运行结果不变。可以看到,即使在函数Sort中将x定义为指针变量,在函数中仍可用x[i]、x[k]这样的形式表示数组元素,它就是x+i和x+k所指的数组元素。它等价于
sort(int *x,int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(*(x+j)>*(x+k)) k=j;
if(k!=i)
{t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;
}
}
}