遞迴排序演算法

2021-07-04 14:32:36 字數 896 閱讀 8676

1、  歸併排序

歸併排序用的是分治法,即將要排序的陣列分而治之。如圖所示

簡單的**如下:

public class merge

}publicvoid mergearray(inta,int first,intmid,int last)

while(i <= m)

while(j <= n)

for(i = 0; i < k;i++ )//將有序子陣列放回a中對應的位置

}}

歸併過程為:比較a[i]和a[j]的大小,若a[i]≤a[j],則將第乙個有序表中的元素a[i]複製到temp[k]中,並令i和k分別加上1;否則將第二個有序表中的元素a[j]複製到temp[k]中,並令j和k分別加上1,如此迴圈下去,直到其中乙個有序表取完,然後再將另乙個有序表中剩餘的元素複製到temp中。

2、  快速排序

快速排序是對氣泡排序的一種改進,是用分治法實現。該方法的基本思想是:

先從數列中取出乙個數作為基準數(一般取最左邊的數);

分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊;

再對左右區間重複第二步,直到各區間只有乙個數;

public class quick

while (i < j && a[i] < key)//索引i處的數小於鍵值

i++;

if (i < j)//索引i處的數大於鍵值

}a[i] = key;//將鍵值放在索引i處

returni;

}publicvoid quicksort(inta, int left, intright)

}}

遞迴排序演算法

遞迴呼叫是用相同的方法去解決更小的問題,直到問題規模小於或等於某個邊界條件時,不再進行遞迴 遞迴的出口 而是直接處理,然後不斷向下執行函式返回結果。1.當問題小到一定規模時,可以直接求解 2.當問題規模較大時,可以分解為若干個相互獨立的子問題,這些子問題與原問題具有相同的特徵。若不能直接解決,則可分...

遞迴與排序演算法

程式 資料結構 演算法 遞迴是一種應用非常廣泛的演算法。很多資料結構和演算法的編碼實現都要用到遞迴。排序演算法最經典最常用的冒泡插入選擇,時間複雜度都為o 乙個問題的解可以分解為幾個子問題的解 這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 存在遞迴終止條件 分成遞和歸來看,我覺得和...

快速排序 遞迴演算法

快速排序原理 從乙個陣列中任意挑選乙個元素 通常為最左邊的元素 作為基準數,將剩下的元素和基準數進行比較,將小於等於中軸元素的放到基準數的左邊,經大於 中軸元素的放到基準數的右邊,然後以當前基準數的位置為界,將左半部分陣列和右 半部分陣列堪稱兩個新的陣列,重複上述操作,直到子陣列的元素個數小於等於1...