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)依次輸出元素