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

    归并排序基本介绍

    归并排序是利用归并的思想实现的排序算法,该算法采用经典的分治策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案修补在一起,即分而治之)

    代码:

    package com.gcy.sort;

    import java.util.Arrays;

    import javax.imageio.event.IIOReadWarningListener;

    /**
    * 归并排序
    * @author Administrator
    *
    */
    public class MergetSort {

    public static void main(String[] args) {
    int[] arr= {8,4,5,7,1,3,6,2};
    int[] temp=new int[arr.length];
    mergeSort(arr, 0, arr.length-1, temp);
    System.out.println("排序后的数组为:"+Arrays.toString(arr ));

    }
    /**
    * 分和治
    * @param arr
    * @param left
    * @param right
    * @param temp
    */
    public static void mergeSort(int [] arr,int left,int right,int[] temp) {
    if(left<right) {
    int mid=(left+right)/2;//中间值,在合并过程中用到
    //向左递归分解
    mergeSort(arr, left, mid, temp);
    //向右边进行分解
    mergeSort(arr, mid+1, right, temp);
    //合并
    merge(arr, left, mid, right, temp);
    }
    }
    /**
    * 合并的过程
    * @param arr待排序的原始数组
    * @param left左边有序序列的初始索引
    * @param mid中间索引
    * @param right右边索引
    * @param temp中转数组
    */
    public static void merge(int[] arr,int left,int mid,int right,int[] temp) {
    int i=left;//左边有序序列的初始索引
    int j=mid+1;//初始化j,右边有序序列的初始索引
    int t=0;//指向temp数组的当前索引

    //先把左右两边(有序)的数组,按照一定的规则,填充到temp数组中,直到左右两边的有序序列处理完毕
    while(i<=mid && j<=right) {
    if(arr[i]<arr[j]) {
    temp[t]=arr[i];
    t+=1;
    i+=1;
    }else {
    temp[t]=arr[j];
    t+=1;
    j+=1;
    }
    }
    //把有数据剩余的一方的数据依次填充到temp中
    while(i<=mid) {//说明左边有序序列数据还有剩余
    temp[t]=arr[i];
    t+=1;
    i+=1;
    }
    while(j<=right) {//说明右边有序序列数据还有剩余
    temp[t]=arr[j];
    t+=1;
    j+=1;
    }
    //将temp数组中的数据拷贝到arr中,注意并不是每次都拷贝所有,针对待排序数组,会有七次拷贝
    t=0;
    int tempLeft=left;
    System.out.println("tempLeft="+tempLeft+"right="+right);
    while(tempLeft<=right) {
    arr[tempLeft]=temp[t];
    t+=1;
    tempLeft+=1;
    }
    }

    }

    截图:

     感兴趣可以测试一下速度,和其他算法做一下比较

  • 相关阅读:
    【STM32 .Net MF开发板学习02】GPIO测试
    【STM32 .Net MF开发板学习01】Hello world
    【STM32 .Net MF开发板学习04】TinyGUI位图显示
    【STM32 .Net MF开发板学习03】TinyGUI绘图示例
    【STM32 .Net MF开发板学习06】蜂鸣器和LED数码管显示
    免费发放firmwave,打造史上最低价.Net MF开发板
    Windows Media Center携手新浪、搜狐推出互联网视频
    【STM32 .Net MF开发板学习07】全屏位图无闪烁显示
    第二部分 Mongodb增删改查 简单
    第二部分 Mongodb固定集合与性能 简单
  • 原文地址:https://www.cnblogs.com/juddy/p/13775652.html
Copyright © 2011-2022 走看看