標籤:
1 /** 2 * @author 黃志偉 3 */ 4 public class QuickSort { 5 public static void main(String[] args) { 6 int [] array = {49,38,65,97,76,13,13,27,4,8,2,3,56}; 7 quickSort(array, 0, array.length - 1); 8 for (int i = 0; i < array.length; i++) { 9 System.out.println(array[i]);10 }11 }12 13 /**14 * @param nums 要遞迴處理的數組15 * @param left 左邊界 begin 016 * @param right 右邊界 end length-117 */18 private static void quickSort(int[] nums,int left,int right){19 int x = (left+right)/2;20 int key = nums[x];21 int i = left;22 int j = right;23 int index = x;24 //如果長度為一或越界則不需要處理25 if(left >= right) return;26 while(i < j){27 //左邊跳過>=key的一切值28 while(i < j && nums[j] >= key){29 j--;30 }31 //右邊跳過<key的一切值32 while(i < j && nums[i] < key){33 i++;34 }35 //使用index來儲存key值所在的數組下標36 //x的對應值只會不對換或對換一次37 if(i == x && i != j){38 index = j;39 }40 if(j == x && i != j){41 index = i;42 }43 //交換i、j的對應值44 int tmp = nums[i];45 nums[i] = nums[j];46 nums[j] = tmp;47 }48 //判斷i == j(邊界)處的值大於還是小於0,劃分到不同的地方49 if(nums[i] < key){50 ++i;51 }52 int temp = nums[i];53 nums[i] = nums[index];54 nums[index] = temp;55 quickSort(nums,left,i-1);56 quickSort(nums,i+1,right);57 }58 }
快速排序的java實現(key的位置可任取)