本篇內容:
- 快速排序
快速排序
算法思想:
通過一趟排序將要排序的數據分割成獨立的兩部分,
其中一部分的所有數據都比另外一部分的所有數據都要小,
然后再按此方法對這兩部分數據分別進行快速排序,
整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
代碼實現:(遞歸)
/** * */ package com.cherish.SortingAlgorithm; /** * @author acer * */ public class Chapter_6_QuickSorting extends ArrayBase{ /** * */ public Chapter_6_QuickSorting() { // TODO 自動生成的構造函數存根 } /** * @param args */ public static void main(String[] args) { // TODO 自動生成的方法存根 int[] array = new int[] {3,4,7,9,2,5,1,8,6}; quickSorting(array,0,array.length-1); printArray(array); } /* * 通過一趟排序將要排序的數據分割成獨立的兩部分, * 其中一部分的所有數據都比另外一部分的所有數據都要小, * 然后再按此方法對這兩部分數據分別進行快速排序, * 整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。 * */ public static void quickSorting(int[] array,int low,int high) { if(low < high) { //獲取基准點 int middle = getMiddle(array,low,high); quickSorting(array,low,middle-1); quickSorting(array,middle+1,high); } } //對每個分部數組進行排序,並給出下一輪的數組切分點 public static int getMiddle(int[] list,int low,int high) { //數組的第一個數為基准元素 int temp = list[low]; while(low<high) { while(low<high && list[high]>temp) { high--; //從后向前找比基准小的數 } //把比基准小的數移到低端 list[low] = list[high]; while(low<high && list[low] < temp) { low++; //從前向后找比基准大的數 } //把比基准大的數移到高端 list[high] = list[low]; } list[low] = temp; return low; } }
實現結果: