1. 程式人生 > >快速排序我每3天手寫一次快排--當你說遲了的時候,要謹慎!!!

快速排序我每3天手寫一次快排--當你說遲了的時候,要謹慎!!!

快速排序,簡單的一麻批

首先分享一個網站:http://developer.51cto.com/art/201403/430986.htm 老哥賊牛逼,讓我對快排記憶中抹都抹不去。 個人理解快速排序: 1.讓找到key在陣列中的位置,讓左邊的數小於key(或者大於),讓右邊的數大於key(或者xiaoyu) 2.首尾指標,從右邊指標開始(這讓最後和key交換的數會比key小(升序))。 3.二分法(遞迴實現)。 4.必須經常手寫。

public class QuickSort {

    public static void quicksort(int[] nums){
        if(nums ==
null || nums.length ==0){ return; } quicksort(nums, 0, nums.length-1); } public static void quicksort(int[] nums, int low, int high){ if(low > high){ return; } int i = low; int j = high; int key = nums[low]; while
(i < j){ while (i < j && nums[j] >= key) { j--; } while (i < j && nums[i] <= key){ i++; } if(i < j){ int temp = nums[j]; nums[j] = nums[i];
nums[i] = temp; } } nums[low] = nums[i]; nums[i] = key; quicksort(nums, low, i-1); quicksort(nums, i+1, high); } public static void printArr(int[] numbers) { for(int i = 0 ; i < numbers.length ; i ++ ) { System.out.print(numbers[i] + ","); } System.out.println(""); } public static void main(String[] args) { int[] numbers = {10,10,20,15,0,6,7,2,1,-5,55,10}; quicksort(numbers); printArr(numbers); } }