您的位置:首页 > 其它

快速排序

2016-07-10 16:59 183 查看
快速排序
1.      快速排序的思想:

通过将一个数组划分为两个字数组,然后通过递归调用自身为每个字数组进行快速排序来实现。

2.      如何进行划分:

设定关键字,将比关键字小的数据放在一组,比关键字大的放在另一组。

3.      如何自动设定关键字:

设置数组最右端的数据为关键字。

快速排序的实现:

/*
 * 快速排序
 */
public
class
QuickSort {
 
    /**
     * 划分数组
     */
    public
static int
partition(long arr[],int left,
int right,long point) {
        int leftPtr = left - 1;
        int rightPtr = right;
        while(true) {
            //循环,将比关键字小的留在左端
            while(leftPtr < rightPtr&& arr[++leftPtr] < point);
            //循环,将比关键字大的留在右端
            while(rightPtr > leftPtr&& arr[--rightPtr] > point);
            if(leftPtr >= rightPtr){
                break;
            }else{
                long tmp = arr[leftPtr];
                arr[leftPtr]=  arr[rightPtr];
                arr[rightPtr]= tmp;
            }
        }
        //将关键字和当前leftPtr所指的这一个进行交换
        long tmp = arr[leftPtr];
        arr[leftPtr]=  arr[right];
        arr[right]= tmp;
        return leftPtr;
    }
   
    public
static void
displayArr(long[] arr) {
        System.out.print("[");
        for(long num : arr) {
            System.out.print(num +
" ");
        }
        System.out.print("]");
        System.out.println();
    }
   
    public
static void
sort(long[] arr,
int left, int right) {
        if(right - left <= 0) {
            return;
        }else{
            //设置关键字
            long point = arr[right];
            //获得切入点,同时对数组进行划分
            int partition =
partition(arr,left, right, point);
            //对左边的子数组进行快速排序
            sort(arr,left,partition- 1);
            //对右边的子数组进行快速排序
            sort(arr,partition+ 1, right);
        }
    }
}

public
class
TestQuickSort {
    public
static void
main(String[] args) {
        long[] arr  =
new long[10];
        for(int i = 0; i < 10;i++) {
            arr[i]= (long)(Math.random() * 99);
        }
       
        QuickSort.displayArr(arr);
       
        QuickSort.sort(arr,0, arr.length- 1);
       
        QuickSort.displayArr(arr);
    }
}
运行结果:

[7 63 40 63 9 71 61 26 9 21 ]
[7 9 9 21 26 40 61 63 63 71 ]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序