快速排序我每3天手寫一次快排--當你說遲了的時候,要謹慎!!!
阿新 • • 發佈:2018-12-17
快速排序,簡單的一麻批
首先分享一個網站: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);
}
}