码迷,mamicode.com
首页 > 编程语言 > 详细

java之快速排序

时间:2020-07-30 16:51:14      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:思路   color   length   oid   string   扫描   print   sort   循环   

/*快速排序
    算法思路:
        1、在待排序的N个记录中任取一个元素(通常取第一个记录)作为基准,称为基准记录;
        2、定义两个索引 left 和 right 分别表示“首索引” 和 “尾索引”,key 表示“基准值”;
        3、首先,尾索引向前扫描,直到找到比基准值小的记录(left != righ),并替换首索引对应的值;
        4、然后,首索引向后扫描,直到找到比基准值大于的记录(left != righ),并替换尾索引对应的值;
        5、若在扫描过程中首索引等于尾索引(left = right),则一趟排序结束;将基准值(key)替换首索引所对应的值;
        6、再进行下一趟排序时,待排序列被分成两个区:[0,left-1],[righ+1,end]
        7、对每一个分区重复步骤2~6,直到所有分区中的记录都有序,排序成功。
*/
public class ArraysTest2 {

    public static void main(String[] args) {

        int[] arr = new int[]{-1,3,-2,5,8};
        System.out.print("快速排序前结果为:"+"\n");
        for (int i : arr ) {
            System.out.print(i + "\t");
        }
        quickSort(arr, 0, arr.length - 1);
        System.out.print("\n"+"快速排序后结果为:"+"\n");
        for (int i : arr ) {
            System.out.print(i + "\t");
        }
    }

    private static void quickSort(int[] arr, int leftIndex, int rightIndex){

        //当左边索引大于等于右边索引,表示第一遍循环完毕
        if(leftIndex >= rightIndex){
            return;
        }

        int left = leftIndex;
        int right = rightIndex;
        //待排序的第一个元素为基准
        int key = arr[left];

        //前后两边交替扫描,直到出现left = right才结束循环
        while (left < right){
            while (left < right && arr[right] >= key){
                //从右往左扫描,找到第一个比基准值小的元素
                right--;
            }

            //找到比基准小的值后,将值(arr[right])与arr[left]替换
            arr[left] = arr[right];

            while (left < right && arr[left] <= key){
                //从左往右扫描,找到第一个比基准值大的元素
                left++;
            }
            //找到比基准大的值后,将值(arr[left])与arr[right]替换
            arr[right] = arr[left];
        }

        //基准值归位
        arr[left] = key;
        //递归调用快速排序方法
        quickSort(arr, leftIndex, left-1);
        quickSort(arr, right+1, rightIndex);
    }

}

 

java之快速排序

标签:思路   color   length   oid   string   扫描   print   sort   循环   

原文地址:https://www.cnblogs.com/tar8087/p/13404226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!