歸并排序

歸并排序的基本思路:

  • merge函數將兩個有序數列歸并到一個有序數列中
  • 根據分治法,利用遞歸,不斷歸并有序數列
  • 遞歸最終的單元操作為:將兩個分別只含有一個元素的有序數列歸并為一個數列
#include <iostream>
using namespace std;

void merge(int *input, int start, int mid, int end, int *temp) {
    int k = 0;
    int leftNum = mid;
    int rightNum = end;
    int i = start;
    int j = mid + 1;
    
    while (i <= leftNum && j <= rightNum) {
        if (input[i] < input[j]) {
            temp[k++] = input[i++];
        } else {
            temp[k++] = input[j++];
        }
    }
    while (i <= leftNum) {
        temp[k++] = input[i++];
    }
    while (j <= rightNum) {
        temp[k++] = input[j++];
    }
    for (i = 0; i < k; i++) {
        input[start + i] = temp[i];
    }
}


void mergeSort(int *input, int start, int end, int *temp) {
    if (start < end) {
        int mid = (start + end) / 2.;
        mergeSort(input, start, mid, temp);
        mergeSort(input, mid + 1, end, temp);
        merge(input, start, mid, end, temp);
    }
}
int main() {
    int a[] = {3,5,6,2,1,9,8};
    int p[7];
    mergeSort(a, 0, 6, p);
    
    for (int i = 0; i < 7; i++) {
        cout<<a[i];
    }
    cout<<endl;
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 數據結構與算法--歸并排序 歸并排序 歸并排序基于一種稱為“歸并”的簡單操作。比如考試可能會分年級排名和班級排名,...
    sunhaiyu閱讀 904評論 0 6
  • Q:什么是歸并排序?A:它是建立在歸并操作上的一種有效的排序算法;是采用分治法的一個非常典型的應用;是一種穩定的 ...
    TinyDolphin閱讀 2,970評論 5 4
  • 歸并排序 所謂歸并,就是將兩個或兩個以上的有序表合并成一個新的有序表。如下圖所示,有兩個已經排好序的有序表A[1]...
    JackChen1024閱讀 2,377評論 0 4
  • 請尊重作者的勞動成果,如需轉載請注明出處,謝謝! 如果覺得不錯,可以關注我或者點贊,這就是你們對我最大的鼓勵! 歸...
    QiuZhiFeng閱讀 933評論 0 4
  • 于是還沒有好好享受鹽水鴨、鴨血粉絲湯和金陵醬鴨,我們仨又以極快的速度奔向了北京。胖子心有不甘,在火車站旁邊的小超市...
    Scorpio幻蝶閱讀 482評論 0 2