歸併排序

閒着無事,重新複習了一下歸併排序。

總體上也就是二分+合併的過程,在合併的過程中排序即可。

想看的話,這篇博客有詳細的圖文解釋(不過是Java的):https://www.jianshu.com/p/33cffa1ce613

自己用C寫了一個歸併的例子,直接放代碼:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 10;
int a[maxn];
void merge(int a[], int l, int mid, int r)
{
	int temp[55];
	int p1 = l;
	int p2 = mid + 1;
	int k = 0;
	while (p1 <= mid&&p2 <= r)
		temp[k++] = a[p1] < a[p2] ? a[p1++] : a[p2++];
	while (p1 <= mid)
		temp[k++] = a[p1++];
	while (p2 <= r)
		temp[k++] = a[p2++];
	for (int i = 0; i < k; i++)
		a[l + i] = temp[i];
}
void Sort(int a[], int l, int r)
{
	if (l == r)
		return;
	int mid = (l + r) / 2;
	Sort(a, l, mid);
	Sort(a, mid + 1, r);
	merge(a, l, mid, r);
}
int main()
{
	
	//freopen("C://input.txt", "r", stdin);
	for (int i = 0; i <= maxn; i++)
	{
		a[i] = maxn - i;
	}
	Sort(a,0,maxn);
	for (int i = 0; i <= maxn; i++)
	{
		cout << a[i] << endl;
	}
	return 0;
}

 

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