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

  • 相关阅读:
    PS学习之餐饮行业修图
    python的IDE选择
    python简介与安装
    selenium不能启动firefox浏览器,怎么办?
    selenium定位元素(python)
    如何解决Selenium IDE与Firefox的不兼容问题?
    手工测试的关注点之用户管理
    《Google 测试之道》有感(一)
    LR性能测试衡量指标
    LR集合点与事务
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11074385.html
Copyright © 2020-2023  润新知