• 排序算法


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

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

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

    代码实现如下:

    /**
     * 归并排序
     *
     * @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);
    
        }
    
    }
  • 相关阅读:
    创建XNA Shooter游戏——概述
    Android 界面切换与恢复原生界面
    输入和用户界面——SpaceCamera类
    ASP.NET下FCKedit配置及使用参考
    1282. Game Tree 夜
    1122. Game 夜
    1136. Parliament 夜
    hdu 3905 Sleeping 夜
    1195. Ouths and Crosses 夜
    1210. Kind Spirits 夜
  • 原文地址:https://www.cnblogs.com/Deters/p/11667365.html
Copyright © 2020-2023  润新知