算法基础--快速排序
Posted 谓戒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法基础--快速排序相关的知识,希望对你有一定的参考价值。
基本思想:
通过一趟排序将需要排序的元素分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。
过程:
(1)设置两个首尾指针left和right,并用base指向头元素作为基准数;
(2)通过right从右到左扫描,寻找比base指向元素小的元素,然后left指向此元素,此时left指向最小数;
(3)通过left从左到右扫描,寻找比base指向元素大的元素,然后right指向此元素,此时right指向最大数;
(4)循环操作2,3直到left和right指向同一个元素,此时左边都比base指向元素小,右边都比base指向元素大;
(5)以base做分割点,递归操作左右两个元素组;
优化:(1)用递归可以减少代码的编写,但是实际上比较消耗内存,特别操作大数组的时候,所以可以用两个循环的形式(不做实现);
实例:
public class QuickSort{
private int division(int[] arr, int left,int right){
int base = arr[left];
while(left < right){
while(left<right && arr[right] >= base){
right --;
}
arr[left] = arr[right];
while(left < right && arr[left] <= base){
left ++;
}
arr[right] = arr[left];
}
arr[left] = base;
return left;
}
private void quickSort(int[] arr,int left,int right){
if(left < right){
int base = division(arr,left,right);
quickSort(arr,left,base-1);
quickSort(arr,base+1,right);
}
}
}
以上是关于算法基础--快速排序的主要内容,如果未能解决你的问题,请参考以下文章