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();
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值