c++ 歸並排序


c++ 歸並排序

輸入輸出格式

輸入格式:

第11行為一個正整數NN,第22行包含NN個空格隔開的正整數a_ia
i
​ ,為你需要進行排序的數,數據保證了A_iA
i
​ 不超過10000000001000000000。

輸出格式:

將給定的NN個數從小到大輸出,數之間空格隔開,行末換行且無空格。

輸入輸出樣例

輸入樣例#1:

8
10 4 6 3 8 2 5 7

輸出樣例#1:

2 3 4 5 6 7 8 10

代碼及注釋

#include <bits/stdc++.h>
using namespace std;
int a[100];
int r[100];
void Sort(int L,int R)
{
	if (L == R)//如果只有一個元素
		return ;//退出
	else
	{
		int mid = (L + R) / 2;//計算出中間值
		Sort(L,mid);//拆分mid前面的
		Sort(mid + 1,R);//拆分mid后面的
/***************對左右兩個有序數組合並****************************/
		int k = L;
		int i = L;
		int j = mid + 1;
		while (i <= mid && j <= R)//進行逐個遍歷
		{
			if (a[i] <= a[j])//如果左邊比右邊大
			{
				r[k] = a[i];//把小的排在前面
				k ++;
				i ++;
			}
			else//如果右邊比左邊大
			{
				r[k] = a[j];//把小的排在前面
				k ++;
				j ++;
			}
		}
		while (i <= mid)//如果還有剩余,就直接復制到r[]
		{
			r[k] = a[i];
			i ++;
			k ++;
		}
		while (j <= R)//如果還有剩余,就直接復制到r[]
		{
			r[k] = a[j];
			j ++;
			k ++;
		}
		for (int i = 1;i <= R;i ++)//把r[]全部賦值給a[]
		{
			a[i] = r[i];
		}
	}
}
int main()
{
	int n;
	cin >> n;
	for (int i = 1;i <= n;i ++)
	{
		cin >> a[i];
	}
	Sort(1,n);//調用
	for (int i = 1;i <= n;i ++)
	{
		cout << a[i] << " ";
	 } 
	return 0;
 } 

思路

1)輸入你要排序的數
2)把這些數字拆分拆分拆分,到不能拆分為止
3)合並這些元素,合並時那個小就把那個放上去
4)依次輸出元素


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM