欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

快速排序Java实现

程序员文章站 2022-07-14 08:05:36
...

按照快排的思想写了写快排,也不知道有没有bug,不过我觉得这个代码的关键点是:

// 此时分为两部分,分别操作
qs(nums, low, index - 1);
qs(nums, index+1,  high);

这一部分,一开始我把low和high写错了,导致看了好久不知道哪里错了???? 

package test;


public class Test {

    private void qs(int []nums, int i, int j){

        for(int k = 0; k < nums.length; k++){
            System.out.print(nums[k] + " ");
        }
        System.out.println();

        if(i < 0 || j < 0 || i > nums.length-1 || j > nums.length - 1 || i >= j){
            return;
        }

        int low = i;
        int high = j;

        // 获得基准值
        int key = nums[i];
        int index = i;
        i += 1;


        while(i <= j){

            // 如果是比它大的,则一直走
            while(nums[j] >= key && i <= j){
                j -= 1;
            }

            if(i <= j && nums[j] < key){
                nums[index] = nums[j];
                index = j;
                j -= 1;
            }

            // 如果是比它小的,则一直走
            while(nums[i] <= key && i <= j){
                i += 1;
            }

            if(i <= j && nums[i] > key){
                nums[index] = nums[i];
                index = i;
                i += 1;
            }
        }

        // 执行完后,得到index为填入key
        nums[index] = key;

        // 此时分为两部分,分别操作
        qs(nums, low, index - 1);
        qs(nums, index+1,  high);

    }


    private void quichSort(int[]nums){
        qs(nums, 0, nums.length-1);
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.quichSort(new int[]{6,9,8,7,2,5,4,3,1});
    }
}

快速排序Java实现