1. 程式人生 > >用指標法對10個整數排序

用指標法對10個整數排序

思路:在主函式中定義陣列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函式只是形式上的不同,實際上形參都是使用指標變數。