ETH官方钱包

創作內容

4 GP

Merge Sort(合併排序法) 實作 ^^

作者:パっパっパスタ│2019-04-01 17:01:30│巴幣:56│人氣:1558
昨天看別人寫的程式碼看了3個小時+問別人問題才搞懂這些程式碼在寫的內容
今天靠著昨天練習的記憶寫出來的

C++:
#include <iostream>

using namespace std;

void Merge(int arr[], int l, int m, int r) //開始合併
{
    int L_size, R_size, i, j, k; //L跟R陣列的大小、i,j,k為指針
    L_size = m - l + 1;          //+1 是因為一開始會有0-0的可能性
    R_size = r - m;
    int L[L_size], R[R_size]; //宣告兩個新陣列分別為左陣列跟右陣列,沒有內容值

    for (i = 0; i < L_size; i++) //把原陣列的值塞進剛定義的L跟R陣列
    {
        L[i] = arr[l + i];
    }

    for (j = 0; j < R_size; j++)
    {
        R[j] = arr[m + 1 + j];
    }

    i = 0;
    j = 0;
    k = l;
    while (i < L_size && j < R_size) //當其中一個比較完就跳出這個陣列
    {
        if (L[i] <= R[j]) //比較小的丟進arr[]
        {
            arr[k] = L[i];
            i++;
        }
        else
        {
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    while (i < L_size) //剩餘的部分全塞進剩下的arr[]
    {
        arr[k] = L[i];
        k++;
        i++;
    }

    while (j < R_size)
    {
        arr[k] = R[j];
        k++;
        j++;
    }
}

void MergeSort(int arr[], int l, int r) //運用遞迴去 divide 陣列,當陣列只有一格時就 return
{
    if (l < r)
    {
        int mid = (l + r - 1) / 2;
        MergeSort(arr, l, mid);
        MergeSort(arr, mid + 1, r);
        Merge(arr, l, mid, r);
    }
}

int main()
{
    int arr[] = {2, 4, 6, 8, 1, 3, 5, 7};
    int len = sizeof(arr) / sizeof(arr[0]);
    int l = 0, r = len - 1;
    cout << "Before Merge: " << endl; //Merge前
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    MergeSort(arr, l, r); //進行 Merge 去切割陣列並排序

    cout << "After Merge: " << endl; //Merge 後
    for (int i = 0; i < len; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
}


實作的觀念是看這兩個影片搞懂的



因為我程式碼寫完很容易忘掉, 所以就先放在這邊
有空就回來複習

要是有什麼需要或建議改進的地方也請告訴我
感謝 ^^
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=4344745
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 4 篇留言

驥哥
水喔 繼續加油XD

04-01 17:19

パっパっパスタ
謝謝大大 <(_ _)>
04-01 17:24
宮水三夜未
好猛?

04-01 17:26

パっパっパスタ
跟你們比起來,我寫的這個根本不算什麼唉....04-01 18:41
雨丸?“ReのLife”★
程式加油!! 日語也加油!!XDD

04-01 17:39

パっパっパスタ
謝謝>< 7月檢定加油啊!!!04-01 18:41
彡Ray彡

06-08 11:05

我要留言提醒:您尚未登入,請先登入再留言

4喜歡★taiwan8575 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:又達成一個小目標啦~... 後一篇:遞迴練習...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】