交換,就是根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置。,基於交換的排序氣泡排序:演算法有很多。以氣泡排序和快速排序舉例。
public static int bubblesort(int array)
}} return newarray;
}
穩定性:氣泡排序是乙個穩定的排序方法。氣泡排序中所產生的有序子串行一定是全域性有序的。快速排序:(基於分治法)
public void quick(int a) }
public void quicksort(int a, int low, int high) }
// 劃分操作,將表a[low..high]劃分為滿足上述條件的兩個子表
private int partition(int a, int low, int high)
a[low] = a[high];
while (low < high && a[low] <= pivot)
a[high] = a[low];
} // 樞軸元素放到最終位置上
a[low] = pivot; // 將基準元素放入到正確的位置上(原陣列分為三段 左邊 基準點 右邊)
return low;
}
空間效率:空間複雜度最壞為o(n),平均情況下為o(log2n)。
時間效率:最壞情況下時間複雜度為o(n2),平均為o(nlog2n)。
穩定性:快速排序是不穩定的排序演算法。
快速排序是所有內部排序演算法中平均效能最優的排序演算法。
如何提高快速排序演算法的效率? 2種方法
(1)當遞迴過程中得到的子串行的規模較小時,不要再繼續遞迴呼叫快速排序,可以直接採用直接插入排序演算法
進行後續的排序工作。
(2)盡量選乙個可以將資料中分的樞軸元素。如從序列的頭尾以及中間選取三個元素,再去這三個元素的中間
值作為最終的樞軸元素;或者隨機從當前表中選取樞軸元素,這樣做使得最壞情況在實際排序中幾乎不會發生。
排序演算法之交換排序
交換排基本思想 兩兩比較待排序元素的關鍵字,發現兩個元素的次序相反時即進行交換,知道沒有反序的元素為止。本節介紹兩種交換排序,即氣泡排序和快速排序。氣泡排序 每次只能和相鄰的位置數進行交換,效率低 include int a 100 void quicksort int left,int right...
排序演算法之交換排序
交換排序的思想是,比較兩個元素的大小,然後確定是否交換位置,主要分為兩種 氣泡排序,依次比較相鄰的兩個元素,把最值放在頭部或者尾部,接下來再用同樣的方法取最值放在頭部或尾部。如下 void bubblesort int a,int n 快速排序,首先設定乙個分界值,然後通過分界值,將陣列分成兩部分,...
排序演算法之交換排序
交換排序有 氣泡排序和快速排序 演算法思想 冒泡遍歷所有的資料,每次對相鄰元素進行兩兩比較,如果順序和預定規定的順序不一致,則進行位置交換 這樣依次遍歷會將最大或最小的資料上浮到頂端,之後對於其他元素重複相同的操作,直到所有的資料有序。即 如果要公升序排序的話,就每次兩兩比較,將較大的元素交換到後面...