首頁>Club>
2
回覆列表
  • 1 # 趣趣hsjdnkf

    #define MAX 10

    首先定義一個宏定義MXA 值為10,作為排序用到的數字。

    //交換函式

    void Swap(int* a, int* b)

    {

    int temp = *a;

    *a = *b;

    *b = temp;

    }

    這個交換函式的方法作為下面排序時遇到需要把插入到另外的一個位置的時候用到。

    //輸出

    void PrintArray(int arr[], int length)

    {

    for (int i = 0; i < length; i++)

    {

    cout << arr[i] << ends;

    }

    cout << endl;

    }

    這個函式是作為輸出陣列時候用到的,引數為一個數組和一個int型別的length作為陣列的長度,裡面透過for迴圈逐個的把數組裡面的元素進行輸出。

    //插入排序

    void InsertSort(int arr[], int length)

    {

    int j;

    for (int i = 0; i < length; i++)

    {

    if (arr[i] < arr[i - 1])

    {

    int temp = arr[i];

    for (j = i - 1; j >= 0 && temp < arr[j]; j–)

    {

    arr[j + 1] = arr[j];

    }

    arr[j + 1] = temp;

    }

    }

    }

    插入排序函式兩個引數分別是陣列以及陣列長度。

    第一部分主迴圈以長度作為結束, i作為下標並自增逐個把陣列遍歷完

    第二部分是比較大小,比較下標i以及i前面的元素如果成立則就是前面的元素比後面的大需要進行下面操作。

    第三部分是進行元素的互換,首先前面的if條件成立的話才能進來執行第三部分否則繼續往下迴圈,首先把下標i的元素給了臨時變數temp,然後進行迴圈,j等於i前面的那個元素也就是比i要大的元素並且i要小於j,否則繼續進行迴圈然後j–。

    第四部分,把j賦值給j+1,也就是j就是比i要大的元素,把它賦值給j後面,然後再迴圈j–直到把前面所有的元素都遍歷完後跳出迴圈,這時j+1是個空,就直接把temp賦值給j+1的下標,完成排序。

    Main主函式:

    void main()

    {

    int arr[MAX];

    srand((unsigned int)time(NULL));

    for (int i = 0; i < MAX; i++)

    {

    arr[i] = rand() % MAX;

    }

    PrintArray(arr, MAX); //呼叫輸出函式

    InsertSort(arr, MAX); //呼叫排序函式

    PrintArray(arr, MAX); //呼叫輸出函式

    }

    首先聲明瞭一個整型的arr陣列長度為宏定義MAX也就是10,呼叫函式srand來使得每次隨機生成的值是不一樣。

    透過for迴圈來逐個把數組裡面的元素輸出,函式呼叫:首先呼叫輸出未排序好的陣列,在呼叫排序函式,再呼叫已經排序好的陣列。

  • 中秋節和大豐收的關聯?
  • 大家覺得五十多歲的人創業幹什麼好呢?