java 實現快速排序
阿新 • • 發佈:2018-12-14
快速排序是對氣泡排序的一種改進,它的基本思想是:通過一趟排序將要排序的部分分割成獨立的兩部分,其中一部分的資料比另一部分的資料都要小,然後對這兩部分資料在快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。 其實快速排序的核心思想就是分治法,分治演算法的基本思想是將一個規模為N的問題分解為K個規模較小的子問題,這些子問題相互獨立且與原問題性質相同。
程式碼實現:
/** * 快速排序的遞迴實現 * @param numbers * @param low * @param high */ public static void quickSort(int[] numbers,int low,int high) { if(low < high) { int middle = getMiddle(numbers,low,high); //將numbers陣列進行一分為二 quickSort(numbers, low, middle-1); //對低欄位表進行遞迴排序 quickSort(numbers, middle+1, high); //對高欄位表進行遞迴排序 } }
/** * 查找出中軸(預設是最低位low)的在numbers陣列排序後所在位置 * * @param numbers 帶查詢陣列 * @param low 開始位置 * @param high 結束位置 * @return 中軸所在位置 */ public static int getMiddle(int[] numbers, int low,int high) { int temp = numbers[low]; //陣列的第一個作為中軸 while(low < high) { while(low < high && numbers[high] >= temp) { high--; } numbers[low] = numbers[high];//比中軸小的記錄移到低端 while(low < high && numbers[low] <= temp) { low++; } numbers[high] = numbers[low] ; //比中軸大的記錄移到高階 } numbers[low] = temp ; //中軸記錄到尾 return low ; // 返回中軸的位置 }
test:
int arr[] = {21,2,3,4,77,3,22,11,12,32,0};
Log.e("sort", Arrays.toString(arr));
quickSort(arr,0,10);
Log.e("sort", Arrays.toString(arr));