快速排序就是選擇乙個基準數,將比基準數大的元素和比基準數小的元素分別在基準數的左右側分割為兩部分,然後從兩部分中分別選取新的基準數進行左右分割,以此類推最終得到有序數列為為止。
存在乙個序列,將其按照從小到大的順序進行排序。
第一次排序,選取序列的第乙個元素7為基準數,從右往左查詢比基準數7小的元素,最後交換元素6和元素7的位置。
第二次排序,從左往右查詢比7大的元素,最後交換元素9和元素7的位置。
第三次排序,從右往左查詢比7小的元素,沒有找到元素,此時左右箭頭重合。
第四次排序,以基準數7為中心,將序列分為左右兩部分,左半部分以元素6為基準數,右半部分以元素9為基準數。
第五次排序,左右兩部分按照以上方法遞迴進行,直到使整個序列有序位置。
對乙個長度為n的序列由小到大進行排序,以0索引的元素為基準數進行排序時從右往左將較小的數交換到基準元素的左端,從左往右將較大數交換到基準元素的右端,交換完畢後以基準元素為界將序列切割為左右兩部分,左右兩部分按照同樣的方式進行元素交換,最終序列會進行
log2
n 次切割。
public class quicksort ;
quicksort.sort(array);
system.out.println("排序後陣列:" + arrays.tostring(array));
}public static void sort(int a)
private static void quicksort(int a, int left, int right)
}private static int division(int a, int left, int right)
a[left] = a[right];
// 從左向右遍歷,找到比base大的數放到最右邊
while (left < right && a[left] <= base)
a[right] = a[left];
}// 將base放到left位置
a[left] = base;
return left;}}
時間複雜度:
以基準元素進行切割, 基準元素的左右元素個數越相近,執行效率越高,左右元素個數差值越大,執行效率越低。即排序的效能與序列的隨機性成正比。
快速排序的最好時間複雜度和平均時間複雜度為o(
nlog2n
) ,最差的時間複雜度為o(
n2) 。
演算法穩定性:
對於序列,第一次遍歷基準元素和最後乙個元素發生位置交換,原序列中兩個元素的前後位置發生改變,因此快速排序是一種不穩定的排序演算法。
排序 快速排序(java實現)
快速排序是一種非常高效的排序演算法,它採用了 分而治之 的思想,把大的拆分成小的,小的再拆分為更小的。其原理如下 對於給定一組記錄,通過一趟排序後,將原序列分為兩部分,其中前一部分的所有記錄都比後一部分的所有記錄小,然後再依次對前後兩部分的記錄進行快速排序,遞迴該過程,直到序列中所有的記錄均為有序為...
Java實現快速排序
package com.handy.ds public class quicksort for int i 0 i a.length i system.out.print a i system.out.println quicksort qs new quicksort qs.quitsort a,...
java實現快速排序
快速排序是平均速度最快的排序演算法,他的平均時間複雜度 n log n 快速排序採用分治法來進行排序,首先先給出乙個陣列,在一開始隨意選擇乙個數pivot,已pivot作為這個陣列的分界點,把大於pivot的數放在右邊,小於pivot的數放在左邊,然後在已pivot的兩邊分界點,右進行一次上一次的操...