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

    package com.cisco.www.test;

    import java.util.Arrays;

    /**
    * 归并排序
    * 算法思想:分治
    * 时间复杂度:O(nlogn)
    * 空间复杂度O(N)
    *
    */
    public class MergeSort {
    public static void mergeSort(int[] arr){
    if(arr==null||arr.length<2){
    return;
    }
    mergeSort(arr,0,arr.length-1);
    }

    public static void mergeSort(int[] arr, int l, int r) {
    if(l==r){
    return;
    }
    int mid = (l+r)/2;
    mergeSort(arr,l,mid);
    mergeSort(arr,mid+1,r);
    merge(arr,l,mid,r);
    }

    private static void merge(int[] arr, int l, int m, int r) {
    int[] help = new int[r-l+1];
    int i = 0 ;
    int p1 = l;
    int p2 = m+1;
    while (p1<=m&&p2<=r){
    help[i++] = arr[p1]<arr[p2]?arr[p1++]:arr[p2++];
    }
    while (p1<=m){
    help[i++]=arr[p1++];
    }
    while (p2<=r){
    help[i++] = arr[p2++];
    }
    for(i = 0 ; i<help.length;i++){
    arr[l+i] = help[i];
    }
    }

    //test
    public static void main(String[] args){
    int testTime = 1000000;
    int size = 100;
    int value =100;
    boolean succeed = true;
    for(int i = 0 ; i <testTime ; i++){
    int[] arr1 = generateRandomArray(size,value);
    int[] arr2 = copyArray(arr1);
    mergeSort(arr1);
    comparator(arr2);
    if(!isEqual(arr1,arr2)){
    succeed=false;
    break;
    }
    }
    System.out.println(succeed?"Nice":"Fucking fucked!");
    int[] arr= generateRandomArray(size,value);
    printArray(arr);
    mergeSort(arr);
    printArray(arr);
    }

    public static boolean isEqual(int[] arr1, int[] arr2) {
    if((arr1==null&&arr2!=null)||(arr1!=null&&arr2==null)){
    return false;
    }
    if(arr1==null&&arr2==null){
    return true;
    }
    if(arr1.length!=arr2.length){
    return false;
    }
    for(int i = 0 ; i<arr1.length;i++){
    if(arr1[i]!=arr2[i]){
    return false;
    }
    }
    return true;
    }

    public static void comparator(int[] arr) {
    Arrays.sort(arr);
    }

    public static int[] copyArray(int[] arr) {
    if(arr==null){
    return null;
    }
    int[] res = new int[arr.length];
    for(int i = 0 ; i<arr.length;i++){
    res[i] = arr[i];
    }
    return res;
    }

    //test
    public static int[] generateRandomArray(int size, int value) {
    //生成长度为0-100之间的随机数组
    int[] arr = new int[(int)(Math.random()*(size+1))];
    for(int i =0 ; i<arr.length;i++){
    arr[i] = (int)(Math.random()*(value+1)) - (int)(Math.random()*value);
    }
    return arr;
    }
    //
    public static void printArray(int[] arr){
    if(arr==null){
    return;
    }
    for(int i =0 ; i <arr.length;i++){
    System.out.print(arr[i]+" ");
    }
    System.out.println();
    }

    }
  • 相关阅读:
    DBCC CHECKDB 数据库或表修复
    数据一致性错误
    SQL Server如何用最小的磁盘来时时访问Oracle
    What 's the meaning of "WindowsonWindows" layer?
    linux解压 tar命令
    ZendStudio中设置SVN:ignore
    微盾PHP脚本加密专家解密算法
    修改linux服务器的时间
    phpmyadmin是空白或很慢的解决办法
    linux 下安装json
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/11100588.html
Copyright © 2011-2022 走看看