八大排序 歸併排序

2021-10-17 19:03:27 字數 811 閱讀 9774

歸併排序是一種很穩定,很快的排序,時間複雜度為o(nlogn),作者很喜歡這個排序

大概思想就是分治,每次找一半,直到就剩一左一右兩個元素,比如說

遞迴找到最左面的也就是 發現有序,然後回溯找右面的發現右面不夠兩個,再回溯也就是合併,即和合併,取乙個temp陣列,用來儲存合併後有序的這個陣列,取左陣列和右陣列的頭,遵循乙個思想,誰小就把誰往temp裡面放,然後下標++。

public

static

void

merge

(int

nums,

int l,

int mid,

int r,

int[

] temp)

else

}//可能乙個陣列都找完了另乙個還剩挺多,所以將剩餘的都放進temp,因為合併之前單個陣列有序,所以可以直接放

while

(lindex<=mid) temp[tempi++

]=nums[lindex++];

while

(rindex<=r) temp[tempi++

]=nums[rindex++];

//將合併好的有序的陣列放回原陣列

for(

int i = l; i <=r; i++)}

public

static

void

sortmerge

(int

nums,

int l,

int r,

int[

] temp)

}

八大排序 歸併排序

歸併排序 1.申請空間,使其大小為兩個已經排序的序列之和,用來存放合併後的序列。2.設定兩個指標指向兩序列的開始。3.比較兩個指標所指的元素,選擇小的放的合併空間,移動指標。4.重複3直到某個指標到達序列尾。5.將剩餘的元素拷到合併空間。實現 void merge sort int arr,int ...

八大排序 歸併排序

歸併排序 merge sort 也是一種常用的排序方法,歸併 的含義是將兩個或兩個以上的有序子串行合併成乙個新的有序子串行。如圖10 11為兩組有序子串行的歸併,有序子串行和,通過歸併把它們合併成乙個有序子串行。package ch02 import util.arrayutil public cl...

八大排序演算法 歸併排序

歸併排序的定義 是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併排序的基本思想 設r i n 由兩個有序子表r i m 和r m 1 n 組成,兩個子表長度分別為n i 1 n m。1 j m 1 k i...