歸併排序和案例解析

2021-09-11 18:10:15 字數 1193 閱讀 3956

排序是資料結構中重要的乙個問題領域也是現實生活和面試時比較容易遇到和考到的乙個知識點,所以本篇部落格就說下歸併排序(其他的排序後面也會出部落格講解)

總體介紹:歸併排序是乙個遞迴加分治的思想完成的,對於陣列問題,總的來說就是把左子陣列排好序再把右子陣列排好序,最後在對左右有序陣列進行歸併(即一起排序的過程)。**如下

}//遞迴過程

static void sortprocess(int arr,int l,int r)

private static void merge(int arr, int l, int mid, int r)

while (p1 <= mid)

while (p2 <= r)

//把輔佐陣列中的有序陣列複製到原陣列中

for (int j = 0; j < help.length; j++) }}

案例:在乙個陣列中,每乙個數左邊比當前數小的數累加起來,叫做這個陣列的小和。現在給乙個陣列求這個陣列的小和

思路:其實就是利用歸併排序在和並的時候來求小和,其中有序歸併的時候兩個子陣列都是有序陣列了那麼可以有效利用「有序」這個特點來快速求得小和

public class smallsum ;

system.out.println(sortprocess(arr,0,4));

}//和歸併的時候一樣

static int sortprocess(int arr,int l,int r)

//合併的時候大多都一樣只是多了一步

private static int merge(int arr, int l, int mid, int r)

while(left <= mid)

while(right <= r)

for(i = 0; i < help.length; i++)

return retval;}}

歸併排序詳細解析

我們先來乙個兩個有序的陣列a和b進行排序的 兩個有序的陣列進行排序只需每次選擇兩個陣列中最小的那個數放進c中就ok了,之後如果那個陣列還有剩餘就將其直接接在c後面。時間效率還是很快的達到了o n python原始碼 def memeryarray a,b,c i 0 j 0 k 0 n len a ...

Scala歸併排序解析

一 源 def msort t xs list t lt t,t boolen list t val fst,snd xs splitat n merge msort fst lt msort snd lt 源 來自coursera scala函式式程式設計原理 其中,msort函式的第二個引數 l...

歸併排序和希爾排序

一 歸併排序 歸併排序的時間複雜度為o nlogn 這是該演算法中最好 最壞和平均的時間效能。其中比較操作的次數介於 nlogn 2和nlogn n 1 在每次歸併中比較次數不一樣 賦值操作的次數是 2nlogn 歸併演算法的空間複雜度為 0 n 歸併排序比較占用記憶體,但卻是一種效率高且穩定的演算...