##下面我们将对21 12 45 43 87 897 534 67 90 75这10个数,用下面的程序进行由大到小排序。
预期结果
输入:21 12 45 43 87 897 534 67 90 75
输出:897 534 90 87 75 67 45 43 21 12
程序如下:
#include<stdio.h> int main() { void sort(int x[],int n); //sort函数声明 int i,a[10]; int *p; p=a; //指针变量p指向a[0] printf("please enter 10 integer numbers:\n"); for(i=0;i<10;i++){ scanf("%d",p++); //输入10个整数 }printf("\n"); p=a; //指针变量p重新指向a[0] sort(p,10); //调用sort函数 printf("please Output the sorted 10 numbers\n"); for(p=a,i=0;i<10;i++){ printf("%d ",*p); //排序后的10个元素数组 p++; }printf("\n"); return 0; } void sort(int x[],int n) //定义sort函数,x是形参数组名 { 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函数等价于:
void sort(int *x,int n) //形参x为指针变量 { 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)) //*(x+j)就是x[j],其它也一样 k=j; if(k!=i) {t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;} } } }