演算法 排序演算法

2021-10-01 09:24:42 字數 2400 閱讀 5940

最近在學習《演算法導論》一書,隨手做一下筆記。

輸入:

for

(int i =

1; i < numbers.length; i++

) system.out.

println()

;}}}

return numbers;

輸出:

為了乙個給定的問題,演算法一次或多次遞迴地呼叫其自身以解決緊密相關的若干子問題。

歸併排序,完全遵循分治模式。直觀上其操作如下:

將待排序的n 個元素分解成各具 n/2的元素的兩個子串行。

使用歸併排序遞迴地排序兩個子串行。

合併兩個已經排序的子串行。

假設現在有乙個序列,那如果按歸併排序的思想來操作的話,操作步驟如下:

現假設有已經排序好的兩組陣列 a[left…mid],b[mid…right]。現只要將 a 與 b 中軟小的數字取出,依次存入

c 中,那麼排序就完成了。則這個實現過程如下:

/**

* * @param a 待排序陣列

* @param left 起始下標

* @param mid 中間下標

* @param right 右邊界下標

*/public

static

void

merge

(int

a,int left,

int mid,

int right)

else

}//有可能左右兩邊的陣列沒拿完,上面的迴圈就已經結束了。這裡就把沒拿完的陣列放到臨時陣列裡。

//舉個例子,原陣列為 【1,5,4,3】,則可分為 [1,5],[4,3],mid = 1;left = 0,right = 3;

//第一迴圈,取出1,則 temp = [1,0,0,0],此時,i = 0; j = 2; , i++;

//第二迴圈,取出3,則 temp = [1,3,0,0],些時,i = 1,j = 2; j ++

//第三個迴圈,取出 4,則此時 temp = [1,3,4,0],此時 i = 1,j = 3,j++;

//由於 j = 4.不符合迴圈條件。則此時,將左邊陣列中的 (剩下的元素)放到臨時陣列中。

while

(i <= mid)

while

(j <= right)

//將臨時陣列按原來陣列中的下標,放入原數姐中。

for(

int k =

0; k < temp.length; k++

)}

上述**其實就是實現了圖中的 7 - 8的步驟。

接下來,我們需要實現上圖中的 1-6的步驟。

現給定的乙個陣列a [left…right],其中,left 與 right 分別為陣列的下標。

1、如果 left >= right ,則該陣列中至多只有乙個元素,已排序。

2、若 left < right ,將原陣列分為前後兩部分。計算中間座標的位置 mid,簡單可設定為 (left + right) /2 ;

則原陣列分為 a[left …mid],a[mid +1, right]。

3、如果 a[left …mid],a[mid +1, right] 中的元素大於1(也就是不滿足一,繼續 2 ,3)。

則實現如下:

/**

* * @param a 陣列

* @param left 起始下標

* @param right 終止下標

*/public

static

void

mergesort

(int

a,int left,

int right)

}

測試**:

int

a =;mergesort

(a,0

, a.length -1)

;

輸出:

1,1

,2,4

,4,5

,5,6

,7,7

,7,8

,8,9

,10,11

,13,18

,20,24

,56,66

,78,131

,234

,1234

,11111

,

演算法 排序演算法

內部排序 插入排序 思想 將n個陣列看成乙個有序表和乙個無序表,開始時有序表只有乙個元素,排序過程是每次取出無序表中的第乙個元素,將它的排序碼與有序表中元素的排序碼進行比較,將其放在合適的位置 public static void insertsort int array array inserti...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...