• 归并排序


    tag: 算法基本功 -> 排序 ->快速排序

    归并排序思路:

    (1) 通过递归的方式把数据拆分成两两数据对(可能存在落单的数)

    (2) 将两两数据对进行排序同时将排序结果存在临时数组中

    (3) 把临时数组中已经排好的数按照对应的序号更新到原数组中

    package com.zhaochao.sort;

    /**
    * Created by zhaochao on 17/1/16.
    */
    public class MergeSort {

    public void mergeSort(int[] arrs, int left, int right) {

    if(left >= right || arrs == null || arrs.length <= 1) {
    return;
    }

    int mid = (left + right) / 2;
    mergeSort(arrs, left, mid);
    mergeSort(arrs,mid + 1, right);
    sort(arrs,left,right);

    }

    public void sort(int[] arrs, int left, int right) {
    if(left >= right) {
    return;
    }

    int mid = (left + right) / 2;
    int[] tmp = new int[right - left + 1];

    int i = left;
    int j = mid + 1;
    int count = 0;

    while((i <= mid) && (j <= right)) {
    if ( arrs[i] < arrs[j]) {
    tmp[count++] = arrs[i++];
    }
    else {
    tmp[count++] = arrs[j++];
    }
    }
    while(i <= mid){
    tmp[count++] = arrs[i++];
    }
    while(j <= right) {
    tmp[count++] = arrs[j++];
    }

    for(int p = 0; p < right - left + 1; p++) {
    arrs[p + left] = tmp[p];
    }

    }

    public static void main(String[] args) {

    MergeSort test = new MergeSort();
    //int[] arrs = {9,8,7,6,1,2,3};
    int[] arrs = {9,8,7,6,1,2};
    test.mergeSort(arrs,0,5);
    for(int i = 0; i < 6; i++) {
    System.out.println(arrs[i]);
    }
    }


    }
  • 相关阅读:
    Android中SharedPreferences使用方法介绍
    Android 判断wifi和4G网络是否开启
    network: Android 网络判断(wifi、3G与其他)
    Android NetWorkUtil
    Android开发中常用的工具类整理
    Android开发中常用的工具类整理
    Android 判断用户2G/3G/4G移动数据网络
    Android Wear开发
    Android Wear开发
    Android Wear开发
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6312583.html
Copyright © 2020-2023  润新知