zoukankan      html  css  js  c++  java
  • 合并排序

    合并排序:

              合并排序算法是用来分治策略实现对n个元素进行排序的算法,其基本思想是:将待排序元素分成大小大致相同的两个子集合,

    分别对两个子集合进行排序,最终将排好序的子集合并成要求的排好序的集合。

    递归实现如下:

    package com.KingLong;
    
    import java.util.Scanner;
    
    public class Main
    {
        static final int MAX = 10005;
        static int num[] = new int[MAX];
        static int temp[] = new int[MAX];
        public static void main(String []args)
        {
            Scanner cin = new Scanner(System.in);
            while(cin.hasNext())
            {
                int N = cin.nextInt();
                Init(N);
                for(int i = 0; i < N; i++)
                {
                    num[i] = cin.nextInt();
                }
                MergeSort(0,N);
                for(int i = 0; i < N; i++)
                {
                    System.out.print(num[i] + " ");
                }
                System.out.println();
            }
        }
        static void MergeSort(int left,int right)
        {
            if(left+1 == right)
            {
                return;
            }
            int middle = left+(right-left)/2;//右端点不能取。
            MergeSort(left,middle);
            MergeSort(middle,right);
            Merge(left,middle,right);
        }
        static void Merge(int left,int middle,int right)
        {
            int i = left;
            int j = middle;
            int a = left;
            while(i < middle || j < right)
            {
                if(i == middle)
                {
                    temp[a++] = num[j++];
                }
                else if(j == right)
                {
                    temp[a++] = num[i++];
                }
                else if(num[i] <= num[j])
                {
                    temp[a++] = num[i++];
                }
                else
                {
                    temp[a++] = num[j++];
                }
            }
            for(i = left; i < right; i++)//很重要的一步
            {
                num[i] = temp[i];
            }
        }
        static void Init(int N)
        {
            for(int i = 0; i < N; i++)
            {
                temp[i] = 0;
            }
        }
    }

    非递归实现如下:方法自个考虑,其实实现起来很简单。

  • 相关阅读:
    react-native-开发环境搭建
    深入理解js中的立即执行函数(function(){…})()
    html-webpack-plugin详解
    window.getComputedStyle——ref
    react-hot-loader 的配置【局部刷新】--{create-react-app}
    es6 export、import
    echarts 金字塔
    JFinal源码详解
    如何使用JFinal开发javaweb
    MySQL如何修改密码
  • 原文地址:https://www.cnblogs.com/674001396long/p/10260664.html
Copyright © 2011-2022 走看看