日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 归并排序 非递归_归并排序-递归及非递归的JAVA实现

發(fā)布時間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 归并排序 非递归_归并排序-递归及非递归的JAVA实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歸并排序介紹

平均時間復雜度: O(NLogN)

最好情況時間復雜度: O(NLogN)

最差情況時間復雜度: O(NLogN)

所需要額外空間: 遞歸:O(N + LogN), 非遞歸:O(N)

穩(wěn)定性: 穩(wěn)定

歸并排序基于分治(快排也是),利用歸并來實現(xiàn)排序,其基本思想是:

如果一個數組有n個數據,則可以把這個數組看作n個有序的子序列,每個子序列的長度為1,然后兩兩歸并,就能得到[n/2]個長度為2(或者1,落單的)的字序列,再不斷地兩兩歸并,直到得到一個長度為n的有序數組。

這里選擇Merge就能比較直觀地看到歸并排序的過程。

使用遞歸的歸并排序

理解這個基本思想后,就不難寫出歸并排序的代碼,只要遞歸地進行歸并就行了.

其中歸并函數merge也很好理解,就是合并兩個有序數組為一個有序數組即可。

package com.yenghye.sort;

public class Sort {

public static void MergeSort(int[] arr, int low, int high)

{

//使用遞歸的方式進行歸并排序,所需要的空間復雜度是O(N+logN)

int mid = (low + high)/2;

if(low < high)

{

//遞歸地對左右兩邊進行排序

MergeSort(arr, low, mid);

MergeSort(arr, mid+1, high);

//合并

merge(arr, low, mid, high);

}

}

//merge函數實際上是將兩個有序數組合并成一個有序數組

//因為數組有序,合并很簡單,只要維護幾個指針就可以了

private static void merge(int[] arr, int low, int mid, int high)

{

//temp數組用于暫存合并的結果

int[] temp = new int[high - low + 1];

//左半邊的指針

int i = low;

//右半邊的指針

int j = mid+1;

//合并后數組的指針

int k = 0;

//將記錄由小到大地放進temp數組

for(; i <= mid && j <= high; k++)

{

if(arr[i] < arr[j])

temp[k] = arr[i++];

else

temp[k] = arr[j++];

}

//接下來兩個while循環(huán)是為了將剩余的(比另一邊多出來的個數)放到temp數組中

while(i <= mid)

temp[k++] = arr[i++];

while(j <= high)

temp[k++] = arr[j++];

//將temp數組中的元素寫入到待排數組中

for(int l = 0; l < temp.length; l++)

arr[low + l] = temp[l];

}

}

歸并排序的優(yōu)化(非遞歸歸并排序)

但是,使用遞歸的歸并排序需要深度為LogN的棧空間,雖然代碼很簡單易懂,但是會造成時間和空間上的性能損耗,為了優(yōu)化歸并排序,我們可以使用迭代代替遞歸。

package com.yenghye.sort;

public class Sort {

public static void MergeSort2(int[] arr)

{

//使用非遞歸的方式來實現(xiàn)歸并排序

int len = arr.length;

int k = 1;

while(k < len)

{

MergePass(arr, k, len);

k *= 2;

}

}

//MergePass方法負責將數組中的相鄰的有k個元素的字序列進行歸并

private static void MergePass(int[] arr, int k, int n)

{

int i = 0;

int j;

//從前往后,將2個長度為k的子序列合并為1個

while(i < n - 2*k + 1)

{

merge(arr, i, i + k-1, i + 2*k - 1);

i += 2*k;

}

//這段代碼保證了,將那些“落單的”長度不足兩兩merge的部分和前面merge起來。

if(i < n - k )

{

merge(arr, i, i+k-1, n-1);

}

}

//merge函數實際上是將兩個有序數組合并成一個有序數組

//因為數組有序,合并很簡單,只要維護幾個指針就可以了

private static void merge(int[] arr, int low, int mid, int high)

{

//temp數組用于暫存合并的結果

int[] temp = new int[high - low + 1];

//左半邊的指針

int i = low;

//右半邊的指針

int j = mid+1;

//合并后數組的指針

int k = 0;

//將記錄由小到大地放進temp數組

for(; i <= mid && j <= high; k++)

{

if(arr[i] < arr[j])

temp[k] = arr[i++];

else

temp[k] = arr[j++];

}

//接下來兩個while循環(huán)是為了將剩余的(比另一邊多出來的個數)放到temp數組中

while(i <= mid)

temp[k++] = arr[i++];

while(j <= high)

temp[k++] = arr[j++];

//將temp數組中的元素寫入到待排數組中

for(int l = 0; l < temp.length; l++)

arr[low + l] = temp[l];

}

}

非遞歸而是迭代的歸并排序很直觀,就是從前往后從最小的序列開始歸并,直到完成即可。

但是這里邊界條件不太好想,要注意不要出錯。

總結

以上是生活随笔為你收集整理的java 归并排序 非递归_归并排序-递归及非递归的JAVA实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产视频97 | 中文字幕狠狠干 | 2025国产精品视频 | 在线观看一区二区三区视频 | 国产福利一区在线 | 全部毛片永久免费看 | 婷婷中文字幕在线 | 国产成人亚洲精品无码h在线 | 色狠狠一区二区三区 | 国产人成无码视频在线观看 | 四虎国产精品成人免费入口 | 成人精品视频一区 | 牲欲强的熟妇农村老妇女视频 | 伊人欧美在线 | 亚州中文 | 久久精品国产99 | 男人靠女人免费视频网站 | 久久久久久久久久久久久久久 | 网站免费黄色 | 法国空姐在线观看完整版 | 春色av| 国产香蕉9 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品久久毛片 | 痴汉电车在线观看 | 91精品视频一区 | 亚洲国产日韩av | 国内偷拍久久 | 欧美日韩不卡在线 | 樱井莉亚av | 亚洲免费福利 | 国产高清久久久 | 奇米在线播放 | 日韩精品视频在线 | 成人高清视频免费观看 | 精品国产91久久久久久久妲己 | 精品无码久久久久久国产 | 波多野结衣 久久 | 伦理一级片 | 亚洲免费一区 | 深夜福利网站在线观看 | 亚洲精品日韩欧美 | 色www国产亚洲阿娇 自拍一区在线 | 日日骚一区二区 | av中文资源网 | 97人妻精品一区二区三区软件 | 里番acg★同人里番本子大全 | 在线成人中文字幕 | 人妻一区二区视频 | 少妇做爰xxxⅹ性视频 | 国产原创精品 | 与子敌伦刺激对白播放的优点 | 成人h片在线观看 | 成人精品999 | 91视频在线视频 | 欧美性高潮视频 | 欧美野外猛男的大粗鳮 | 日本天堂网在线 | 免费在线一区二区 | 色多多黄色 | 国产精品免费一区二区三区四区 | 女18毛片| 777欧美| 欧美国产日本 | 91chinese在线 | 一个人在线观看免费视频www | 日韩精品久久一区 | 亚洲欧美中文字幕5发布 | 日本变态折磨凌虐bdsm在线 | 成人区人妻精品一熟女 | 亚洲欧美强伦一区二区 | 中国av免费看 | 日韩 国产 一区 | 国产成人高清视频 | 中文字幕在线视频播放 | 国产成人一区二区三区别 | 白浆影院 | 欧美日日夜夜 | 精品日韩在线观看 | www中文字幕在线观看 | 嫩草在线观看 | 好吊一区二区三区 | 久久综合激的五月天 | 亚洲美女免费视频 | 国产二级一片内射视频播放 | 国产精品高潮呻吟久久av黑人 | 每日在线观看av | 久久国产中文 | 最近中文字幕无免费 | 在线观看黄色动漫 | 日韩精品电影一区二区三区 | 手机av免费在线观看 | 91制服诱惑| 久久久国产视频 | 日韩视频免费观看高清完整版在线观看 | 草莓视频一区二区三区 | 国产免费自拍视频 | 亚洲做受高潮 | 日本在线视频一区二区 |