歸併排序簡單介紹
1、概念
歸併排序(英語:Merge sort,或mergesort)是建立在歸併操作上的一種有效的排序算法。該算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
2.實現思想
歸併排序的核心思想是將兩個有序的數列合併成一個大的有序的序列。通過遞歸,層層合併,即爲歸併。
③動圖演示:
算法實現
void merge(int data[], int lt, int mid, int rt)
{
int len = rt - lt + 1;
//開闢一個新的數組,將原數組映射進去
int *temp = new int[len];
for (int m = lt; m <= rt; m++)
{
temp[m - lt] = data[m];
}
int i = lt, j = mid + 1;//i和j分別指向兩個子數組開頭部分
for (int k = lt; k <= rt; k++)
{
if (i > mid)
{
data[k] = temp[j - lt];
j++;
}
else if (j > rt)
{
data[k] = temp[i - lt];
i++;
}
else if (temp[i - lt] < temp[j - lt])
{
data[k] = temp[i - lt];
i++;
}
else
{
data[k] = temp[j - lt];
j++;
}
}
delete[] temp;
}
//遞歸的使用歸併排序,對data[l....r]排序
void merge_sort(int data[], int l, int r)
{
if (l >= r)
return;
int mid = (l + r) / 2;
merge_sort(data, l, mid);
merge_sort(data, mid + 1, r);
merge(data, l, mid, r);
}
參考資料
https://www.toutiao.com/a6593273307280179715/?iid=6593273307280179715