您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java排序算法之怎么實現快速排序的三數取中法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java排序算法之怎么實現快速排序的三數取中法”吧!
在快排的過程中,每一次我們要取一個元素作為樞紐值,以這個數字來將序列劃分為兩部分。在此我們采用三數取中法,也就是取左端、中間、右端三個數,然后進行排序,將中間數作為樞紐值。
package sortdemo; import java.util.Arrays; /** * Created by chengxiao on 2016/12/14. * 快速排序 */ public class QuickSort { public static void main(String[] args) { int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; quickSort(arr, 0, arr.length - 1); System.out.println("排序結果:" + Arrays.toString(arr)); } /** * @param arr * @param left 左指針 * @param right 右指針 */ public static void quickSort(int[] arr, int left, int right) { if (left < right) { //獲取樞紐值,并將其放在當前待處理序列末尾 dealPivot(arr, left, right); //樞紐值被放在序列末尾 int pivot = right - 1; //左指針 int i = left; //右指針 int j = right - 1; while (true) { while (arr[++i] < arr[pivot]) { } while (j > left && arr[--j] > arr[pivot]) { } if (i < j) { swap(arr, i, j); } else { break; } } if (i < right) { swap(arr, i, right - 1); } quickSort(arr, left, i - 1); quickSort(arr, i + 1, right); } } /** * 處理樞紐值 * * @param arr * @param left * @param right */ public static void dealPivot(int[] arr, int left, int right) { int mid = (left + right) / 2; if (arr[left] > arr[mid]) { swap(arr, left, mid); } if (arr[left] > arr[right]) { swap(arr, left, right); } if (arr[right] < arr[mid]) { swap(arr, right, mid); } swap(arr, right - 1, mid); } /** * 交換元素通用處理 * * @param arr * @param a * @param b */ private static void swap(int[] arr, int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } }
排序結果
[1, 2, 3, 4, 5, 6, 7, 8]
感謝各位的閱讀,以上就是“Java排序算法之怎么實現快速排序的三數取中法”的內容了,經過本文的學習后,相信大家對Java排序算法之怎么實現快速排序的三數取中法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。