資料結構與演算法 3 初等排序演算法

2021-09-10 02:33:16 字數 2221 閱讀 4749

首先我們為每一種排序類建立less()和exchange()這兩個輔助函式用於物件的比較和位置的交換。為了讓我們的排序類支援不同型別的物件,我們使用了comparble介面。

private static boolean less(comparable v, comparable w) 

private static void exchange(comparable a, int i, int j)

排序演算法的額外記憶體開銷和執行時間是同等重要的。排序演算法可以分為兩類:除了函式呼叫所需的棧和固定數目的例項變數之外無需額外記憶體的原地排序方法,以及需要額外記憶體空間來儲存另乙份陣列副本的其他排序方法

首先,找到陣列中最小的那個元素,其次,將它和陣列中的第乙個元素進行交換。然後,在剩下的元素中尋找最小的元素,與陣列中的第二個元素進行交換,如此反覆。

對於長度為n的陣列,選擇排序需要大約

public class selection 

exchange(a, k, i);}}

private static boolean less(comparable a, comparable b)//...見上文

private static void exchange(comparable a, int i, int j) //...見上文

}

通常人們整理橋牌的方法是一張一張的來,將每一張牌插入到其他已經有序的牌中的適當位置。在計算機的實現中,為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入之前都向右移動一位。這就是插入排序。

private static boolean less(comparable a, comparable b)//...見上文

private static void exchange(comparable a, int i, int j) //...見上文

}實現**:

public class insertionx 

}if(exchanges == 0) return;

for(int i = 2; i < n; i++)

a[j] = v;}}

//......

}

使用二分查詢來快速確定插入的下標,減少比較和交換的次數。

public class binaryinsertion else

}comparable v = a[i];

for(int j = i; j > lo; j--)

a[lo] = v;}}

private static boolean less(comparable a, comparable b)//...見上文

private static void exchange(comparable a, int i, int j) //...見上文

}

希爾排序的思想是使陣列中任意間隔為h的元素都是有序的。這樣的陣列被稱為h有序陣列。在進行排序時,如果h很大,我們就能將元素移動到很遠的地方,為實現更小的h有序創造方便。用這種方式,對於任意以1結尾的h序列,我們都能夠將陣列排序,這就是希爾排序。

希爾排序更高效的原因是它權衡了子陣列的規模和有序性。排序之初,各個子陣列都很短,排序之後子陣列都是部分有序的,這兩種情況都很適合插入排序。子陣列部分有序的程度取決於遞增序列的選擇。徹底理解希爾排序的效能至今仍然是一項挑戰。

public class shell 

}h /= 3;}}

private static boolean less(comparable a, comparable b)//...見上文

private static void exchange(comparable a, int i, int j) //...見上文

}

資料結構與演算法 排序演算法(3)

1 原理 將要排序的資料分到幾個有序的桶裡,每個桶裡的資料再進行排序。桶內的資料排序完畢之後,再把桶裡的資料依次取出,組成的序列就是有序的了。2 原地排序?屬於原地排序演算法。主要看桶內排序是否時原地排序演算法,若選擇插入排序,則桶排序就是屬於原地排序,若選擇了快速排序,則不屬於原地排序。3 穩定性...

資料結構與演算法 排序演算法

帶問題思考以下幾點 1 每個演算法的思想是什麼?2 每個演算法的穩定性怎樣?時間複雜度是多少?3 在什麼情況下,演算法出現最好情況 or 最壞情況?4 每種演算法的具體實現又是怎樣的?n每次選擇乙個元素k插入到之前已排好序的部分a 1 i 中,插入過程中k依次由後向前與a 1 i 中的元素進行比較。...

演算法與資料結構 3 氣泡排序

氣泡排序的基本思想 序列中相鄰兩個元素兩兩比較,當乙個元素大於右邊的元素時,交換置為 否則位置不變。直到整個序列都滿足排序要求為止。下面舉個例子進行說明,如下圖所示 故,對於一組包含n個資料的記錄,氣泡排序就是要每趟排序過程中通過兩兩比較相鄰元素,將小的數字放到前面,大的數字放在後面。氣泡排序在最壞...