日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Java與算法之(11) - 合并排序

Java與算法之(11) - 合并排序

來源:程序員人生   發布時間:2016-11-17 09:08:15 閱讀次數:2853次

天下事,合久必分,分久必合。合并排序的基本思想正是先分再合。

例如對3, 1這個數列排序,首先是分,分為3和1兩個數列,然后再合并并排序。合并需要額外的輔助空間,即建立1個兩個數列長度之和的空數組用于存儲合并結果。

合并分為3步:

1)兩個數列在起始位置各分配1個"指針",對照指針位置的數字,取較小的數字存入輔助數組。數字被移出的1側,指針右移1格,再次比較兩個指針位置的數字,直到某1側的指針移出數組之外結束。

2)把左邊數組剩余的數字按順序移動到輔助數組中

3)把右邊數組剩余的數字按順序移動到輔助數組中

進程以下圖:


下面把兩個數組的長度都增加到2,再看1下合并進程:


視察1下這個流程可以看出,這類合并排序的條件是左右兩個數列本身是有序的。所以如果對4, 2,  3, 1排序,拆成4, 2和3, 1兩個數列明顯是不行的,需要繼續拆分4, 2為4和2,然后合并為2, 4;拆分右邊為3, 1,然后合并成1, 3。最后合并2, 4和1, 3。

以4, 3, 6, 2, 7, 1, 5為例,完全的排序進程以下圖:


來看代碼:

import java.util.Arrays; /** * 合并排序法 * Created by autfish on 2016/9/20. */ public class MergeSort { public static void main(String[] args) { int[] numbers = new int[] {4, 3, 6, 2, 7, 1, 5}; System.out.println("排序前: " + Arrays.toString(numbers)); MergeSort ms = new MergeSort(); ms.sort(numbers, 0, numbers.length - 1); System.out.println("排序后: " + Arrays.toString(numbers)); } public void sort(int[] numbers, int from, int to) { int middle = (from + to) / 2; if (from < to) { sort(numbers, from, middle); sort(numbers, middle + 1, to); //左邊數列最大值小于右邊數列最小值, 不需要通過合并來調劑順序 if(numbers[middle] < numbers[middle + 1]) return; merge(numbers, from, middle, to); } } private void merge(int[] numbers, int from, int middle, int to) { int[] temp = new int[to - from + 1]; int left = from; int right = middle + 1; int i = 0; //從拆分到兩邊數列各剩1個數字開始合并; 當數列中有多個數字時, 1定是已排好序的 //從兩邊數列左邊開始順次取數對照, 挑選小的1個放入臨時數組 while (left <= middle && right <= to) { if (numbers[left] < numbers[right]) { temp[i++] = numbers[left++]; } else { temp[i++] = numbers[right++]; } } //把左側數列剩余的數移入數組 while (left <= middle) { temp[i++] = numbers[left++]; } //把右側數列剩余的數移入數組 while (right <= to) { temp[i++] = numbers[right++]; } System.arraycopy(temp, 0, numbers, from, temp.length); } }
運行:

排序前: [4, 3, 6, 2, 7, 1, 5] 排序后: [1, 2, 3, 4, 5, 6, 7]
合并排序平均情況和最壞情況的時間復雜度都是O(nlogn),由于需要額外的輔助空間,空間復雜度為O(n)。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产视频一区二区 | 激情国产视频 | 一区二区av在线 | 激情欧美一区二区三区 | www久 | 91日韩在线| 亚洲精品中文字幕在线 | 日韩欧美在线一区二区 | 欧美日韩在线电影 | 国产视频网 | 99re8在线精品视频免费播放 | 在线久久 | 可以免费看的毛片 | 6—12呦国产精品 | 国产 欧美 日韩 一区 | 欧美欧美欧美 | 毛片一区二区三区 | av一区二区三区在线播放 | 最近中文字幕在线观看视频 | 久久免费国产 | 欧美99| 最新日韩精品在线观看 | 91视频在线观看视频 | 国产极品视频 | 黄色片一级片 | 91久久国产综合久久蜜月精品 | 亚洲欧美综合精品久久成人 | 国产精品射 | 亚洲成人av电影网站 | 中文字幕第六页 | 亚洲精品人成 | 91久久精品国产 | 国产精品成人在线观看 | 欧美成人午夜免费视在线看片 | 国产成人精品亚洲777人妖 | 精品999久久久 | www.日韩高清 | 久久精品高清 | 日本黄站 | 日韩免费精品视频 | 超碰三级电影 |