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

    在实际应用当中,对于数据较大的输入,归并排序是比较快的一个算法。该算法采用的是分治法的思想。

    原理:将数据分开排序,然后进行合并,最后形成一个排好的序列。

    将其合并输出,如下图所示:

    代码实现如下:

    /**
     * 归并排序
     *
     * @author Deters
     * @date 2019/10/12
     */
    public class MergeSort {
    
        /**
         * 归并
         */
        private static void merge(Integer[] array, int start, int end, int middle) {
            // 临时数组,储存左右分支合并之后的数组
            Integer[] temp = new Integer[end - start + 1];
            // 临时数组当前位置下标
            int index = 0;
            // 左分支下标
            int lCt = start;
            // 右分支下标
            int rCt = middle + 1;
    
            // 当左右分支都有数据时
            while (lCt <= middle && rCt <= end) {
                temp[index++] = array[lCt] - array[rCt] < 0 ? array[lCt++] : array[rCt++];
            }
            // 只有左分支有数据
            while (lCt <= middle) {
                temp[index++] = array[lCt++];
            }
            // 只有右分支有数据
            while (rCt <= end) {
                temp[index++] = array[rCt++];
            }
    
            for (int i = 0; i < temp.length; i++) {
                array[start++] = temp[i];
            }
        }
    
        /**
         * 分支排序
         */
        private static void mergeSort(Integer[] array, int start, int end) {
            int middle = start + (end - start) / 2;
            if (start < end) {
                // 左分支分割
                mergeSort(array, start, middle);
                // 右分支分割
                mergeSort(array, middle + 1, end);
                // 分支排序并合并
                merge(array, start, end, middle);
                System.out.println(Arrays.toString(array));
            }
    
        }
    
        public static void main(String[] args) {
            Random random = new Random();
            Integer[] integers = new Integer[8];
            // 建立数组
            for (int i = 0; i < 8; i++) {
                integers[i] = random.nextInt(10);
            }
    
            // 归并排序
            mergeSort(integers, 0, integers.length - 1);
    
        }
    
    }
  • 相关阅读:
    爬虫案例
    伪静态
    HTTP0.9、HTTP1.0、HTTP1.1、HTTP2的区别
    正向代理和反向代理
    数据结构继承
    APP 爬虫
    算法基础
    matplotlib
    Java类加载机制及自定义加载器
    SpringBoot war包部署到Tomcat服务器
  • 原文地址:https://www.cnblogs.com/Deters/p/11667365.html
Copyright © 2011-2022 走看看