1. 程式人生 > >C語言經典演算法練習一(氣泡排序)

C語言經典演算法練習一(氣泡排序)

本次練習總結:

1.  函式宣告在初次編碼時忘記,教訓一;

2.  不知道不知長度的陣列空間該如何操作,學會了動態分配,知道了malloc函式在<stdlib.h>標頭檔案中,收穫一;

3.  又忘記double型別在printf()和是scanf()中用%f還是%lf,這次加深記憶,教訓二;

4.  懂得可以用指標表示形式申請陣列空間,概念沒有特別清晰,在後面C的學習中將重點學習彌補,收穫二;

5.  因為一開始是寫的固定陣列,所以這個是多次修改後的程式碼,所以沒有走程式設計程式設計執行等的步驟,這個要重視,下次最好重寫過,不能偷懶,教訓三。

#include <stdio.h>
#include <stdlib.h>

double * arrReturn(double*, int);//此函式實現氣泡排序,引數為陣列和陣列長度,返回值為排好序(從小到大)的陣列

int main(void){

    int n;

    printf("您想輸入多少個數?\n");
    scanf("%d", &n );

    double *arr =(double *) malloc(n * sizeof(double));//動態分配

    for(int j = 0; j < n; j ++){
        printf("請輸入第%d個數\n", j + 1);
        scanf("%lf", &arr[j]);
    }
    double *m = arrReturn(arr, n);

    for(int i = 0; i < n; i ++){
        printf("%0.6f\n", m[i]);
    }

    return 0;
    }


double *arrReturn(double *arr , int n){
    int i;

    for(i = 0; i < n - 1; i++ ){//n-1個數將要交換位置
        int j,temp = 0;
        for(j = 0; j < n - i - 1; j ++ ){//第i個數將交換n-1-i次位置
            if(arr[j] > arr[j + 1]){//前一個比後一個大就交換位置,依次按從前往後的位置進行交換
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    return arr;
}