用指標法對10個整數排序
阿新 • • 發佈:2018-12-08
思路:在主函式中定義陣列a存放十個整數,定義int*型變數p並指向a[0]。在主函式中呼叫sort函式,用指標變數p作為實參。sort函式的形參用陣列名。利用選擇排序法進行排序。
#include<stdio.h> int main() { void sort(int x[],int n); int i,*p,a[10]; p=a; //指標變數P指向a[0] printf("輸入十個數:"); for(i=0;i<10;i++) scanf("%d",p++); p=a; //指標變數P重新指向a[0] 用指標變數作實參,必須先指向一個物件 sort(p,10); for(p=a,i=0;i<10;i++) { printf("%3d",*p); p++; } return 0; } void sort(int x[],int n) { int i,j,k,t; for(i=0;i<n-1;i++) //選擇排序法 { k=i; for(j=1+i;j<n;j++) if(x[j]>x[k]) k=j; if(k!=i) { t=x[i]; x[i]=x[k]; x[k]=t; } } }
形參p為指標變數,指向a[0]。形參為陣列名x,編譯系統把x作為指標變數處理,將a[0]的地址傳給形參x,使x也指向a[0]。
sort函式改用指標變數作形參,程式照樣可以執行。
此時sort函式首部為 sort(int*x,int n)
void sort (int *x,int n) { int i,j,k,t; for(i=0;i<n;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函式只是形式上的不同,實際上形參都是使用指標變數。