合并排序

合并排序:

          合并排序算法是用来分治策略实现对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;
        }
    }
}

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

 

posted @ 2019-01-12 18:58  给我一个团队,干翻TX  阅读(148)  评论(0编辑  收藏  举报