W7數組運算 | 利用函數對無序的數組進行排序 |C語言學習筆記

題目:給定無序數組
a[ ] = {77,2,80,48,25,56,90,84,71,10,},
如何排列成有序數組?

思考方向一:在數組裏找出最大的數組,輸出它的位置

在這裏插入圖片描述

  1. 設第0位爲maxid
  2. 如果 a[1]>a[maxid], 讓 maxid = 1
  3. 在循環裏,等循環走完後, maxid的數字就是數組裏最大的一個
for( int i=1; i<len; i++){
	 if( a[i] > a[maxid])
	 {
	 maxid = i;
	 }
 }

代碼如下:

#include <stdio.h>
//在數組中搜索最大數字,返回最大數字的位置
int max( int a[], int len){
    int maxid = 0;
    for( int i=1; i<len; i++ ){
        if( a[i]>a[maxid]){
            maxid = i;
        }
    }
    return maxid;
}

int main()
{
    int a[] = {77,2,80,48,25,56,90,84,71,10,};//定義數組
    int maxid = max(a, sizeof(a)/sizeof(a[0]));
    printf("%d\n", maxid);
    

    return 0;
}

輸出結果:6
//即最大的數字90 在數組的位置是6

思考方向二:找到最大的數字90後,我們希望把90放在最後一位

在這裏插入圖片描述​​
代碼如下:

include <stdio.h>
//在數組中搜索最大數字,返回最大數字的位置
int max( int a[], int len){
    int maxid = 0;
    for( int i=1; i<len; i++ ){
        if( a[i]>a[maxid]){
            maxid = i;
        }
    }
    return maxid;
}

int main()
{
    int a[] = {77,2,80,48,25,56,90,84,71,10,};//定義數組
    int len = sizeof(a)/sizeof(a[0]);//賦值數組的長度給len
    
    //選擇排序
    //swap a[maxid], a[len-1]
    //在len-1位置上做交換
    //交換完後在len-2位置做交換
    //設置控制變量i
    for( int i = len-1; i>0; i--)//i>0意味着最後一個i的位置上1
    {
        int maxid = max(a, i+1);
        //i+1=len-1+1=len,調用函數search在a裏面找最大數字的位置賦值給maxid
        
        int t = a[maxid];
        a[maxid] = a[i];//i=len-1,把最大的數字和len-1位置的數字交換
        a[i] = t;
        
    }
    
    for( int i=0; i<len; i++)
    {
        printf("%d ",a[i]);//把排好序的數字逐個輸出
    }

    return 0;
}

輸出結果:
2 10 25 48 56 71 77 80 84 90

以上是我在中國大學MOOC的翁愷老師《程序設計入門》課程的學習筆記。請多多指教,謝謝老師,謝謝大家?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章