快速排序,简单的一麻批
首先分享一个网站: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);
}
}