JAVA快速排序+归并排序模板

快速排序 

import java.util.*;
import java.math.*;
import java.io.*;
import java.text.*;

public class Main
{
    public static void Partition(int array[], int lower, int upper) 
    {
        int mid=array[(lower+upper)>>1];
        int pointer1=lower,pointer2=upper;
        do
        {
            while(array[pointer1]<mid)
                pointer1++;
            while(array[pointer2]>mid)
                pointer2--;
            if(pointer1<=pointer2)
            {
                int tmp;
                tmp=array[pointer1];
                array[pointer1]=array[pointer2];
                array[pointer2]=tmp;
                pointer1++;
                pointer2--;
            }
        }while(pointer1<=pointer2);
        if(lower<pointer2)
            Partition(array, lower, pointer2);
        if(pointer1<upper)
            Partition(array, pointer1, upper);
    }
    public static void main(String args[]) throws IOException 
    {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String tmp = bf.readLine();
        int n = Integer.parseInt(tmp);
        tmp = bf.readLine();
        String tmps[]=tmp.trim().split(" ");
        int arrays[] = new int[500000];
        for (int i = 1; i <= n; i++)
            arrays[i] = Integer.parseInt(tmps[i - 1]);
        Partition(arrays, 1, n);
        for (int i = 1; i <= n; i++)
            System.out.print(arrays[i] + " ");
        System.out.println("");
        bf.close();
    }
}

归并排序 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.math.*;
public class Main4
{
    static int tempContainer[]=new int[550000]; 
    static int array[]=new int[550000];
    static long ans=0;
    public static void MergeSort(int array[],int lower,int upper)
    {
        if(lower>=upper)
            return ;
        int mid=(lower+upper)>>1;
        MergeSort(array, lower, mid);
        MergeSort(array, mid+1, upper);
        int pointer1=lower,pointer2=mid+1,cnt=lower;
        while(pointer1<=mid&&pointer2<=upper)
        {
            if(array[pointer1]<=array[pointer2])
                tempContainer[cnt++]=array[pointer1++];
            else   
            {
                tempContainer[cnt++]=array[pointer2++];
                ans+=mid-pointer1+1;//逆序数
            }
        }
        while(pointer1<=mid)
            tempContainer[cnt++]=array[pointer1++];
        while(pointer2<=upper)
            tempContainer[cnt++]=array[pointer2++];
        for(int i=lower;i<=upper;i++)
            array[i]=tempContainer[i];
    }
    public static void main(String args[])throws IOException
    {
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        String tmp=bf.readLine();
        int n=Integer.parseInt(tmp);
        tmp=bf.readLine();
        String tmps[]=tmp.trim().split(" ");
        for(int i=1;i<=n;i++)
            array[i]=Integer.parseInt(tmps[i-1]);
        MergeSort(array, 1, n);
        System.out.println(ans);
        bf.close();
    }
}

 

posted @ 2019-08-11 19:44  完全墨染的樱花  阅读(444)  评论(0)    收藏  举报