• 数据结构之归并排序


    归并排序包括自顶向下和自下向上两种方式:这里用的是自顶向下的方法。即先分再合并。

    引自:http://blog.csdn.net/middlekingt/article/details/8446552#comments

    import java.util.Arrays;

    public class mercySort {  
        /**
         * 归并排序
         * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列
         * 时间复杂度为O(nlogn)
         * 稳定排序方式
         * @param nums 待排序数组
         * @return 输出有序数组
         */  
        public static void sort(int[] nums, int low, int high) {  
            int mid = (low + high) / 2;  
            if (low < high) {  
                  
                sort(nums, low, mid);     // 左边
                
                sort(nums, mid + 1, high);              //右边      ,数组还是一个数组,只是将他分为两个部分(以mid为界),那么low 和 high是不变的
                  
                merge(nums, low, mid, high);         //合并左右,这里的递归是排序的主要方法,主要是弄清楚调用之间的关系
            }  
            return ;                      //这里排序,并不需要返回值   递归:将原问题转化到子序列问题,然后到最后单个元素,比较,然后合并。

                                             //在哪里设置断点,程序在哪开始运行,观察变量的变化。
        }  
        public static void merge(int[] nums, int low, int mid, int high) {  
            int[] temp = new int[high - low + 1];  
            int i = low;// 左指针  
            int j = mid + 1;// 右指针  
            int k = 0;  
     
            // 把较小的数先移到新数组中  
            while (i <= mid && j <= high) {  
                if (nums[i] < nums[j]) {  
                    temp[k++] = nums[i++];  
                } else {  
                    temp[k++] = nums[j++];  
                }  
            }  
     
            // 把左边剩余的数移入数组  
            while (i <= mid) {  
                temp[k++] = nums[i++];  
            }  
     
            // 把右边边剩余的数移入数组  
            while (j <= high) {  
                temp[k++] = nums[j++];  
            }  
     
            // 把新数组中的数覆盖nums数组  
            for (int k2 = 0; k2 < temp.length; k2++) {  
                nums[k2 + low] = temp[k2];  
            }  
        }  
     
          
        // 归并排序的实现  
        public static void main(String[] args) {  
     
            int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };  
     
            mercySort.sort(nums, 0, nums.length-1);  
            System.out.println(Arrays.toString(nums));  
        }  
    }  

    态度决定行为,行为决定习惯,习惯决定性格,性格决定命运
  • 相关阅读:
    防止论坛用户重复登录的方法 .
    配置Windows服务器支持json文件的方法
    在线修改ServU密码注意问题。
    a href=#与 a href=javascript:void(0) 的区别,以及location.href含义
    使用sql命令连接字符串类型和整型类型的数据
    数据库SQL Server 2005 的级联设置 外键赋值
    使用VS发布网站后遇到的Fill为Null的奇怪错误。
    使用Visual Studio 2005 IDE的宏,自动为c#变量生成属性
    推荐Zen Garden
    使用 aspnet_regsql.exe 向 SQL Express 数据库中注册脚本
  • 原文地址:https://www.cnblogs.com/neversayno/p/5052138.html
Copyright © 2020-2023  润新知