【基本排序算法】五、歸併排序

歸併排序簡單介紹

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章