Java实现快速排序

Java实现快速排序

package example;

import java.util.Arrays;

public class QuickSort {
    int[] arr = null;
    
    void quickSort(){
        quickSortdetail(0,this.arr.length-1);
    }

    void quickSortdetail(int l,int r){
        //两个指针
         int left = l;
         int right = r;
        //递归头,当左、右指针交叉时,即右指针与左指针重叠或在左指针的左边时,返回
        if(left>=right) {
            return;
        }
        //建立临时变量,存放坐标
        int temp = this.arr[left];
        //循环,直到两个指针指向相同元素
        while (left!=right){
            //循环遍历,从右侧开始,当找到第一个比坐标小的值时
            while (this.arr[right]>=temp&&left!=right){
                right--;
            }
            //将右指针的值赋给左指针,切换到左侧遍历
            this.arr[left] = this.arr[right];
            //循环遍历,从左侧开始,当找到第一个比坐标大的值时
            while (this.arr[left]<temp&&left!=right){
                left++;
            }
            //将左指针的值赋给右指针,切换到右侧遍历
            this.arr[right] = this.arr[left];
        }
        //将坐标值赋给当前元素
        this.arr[left] = temp;
        //在坐标左侧全是比坐标小的值,右侧全是比坐标大的值,递归调用自身,完成左右两个数组的排序
        //需要注意的时,这里与传统二分法不同,坐标点已经是排序完毕了,所以需要把坐标点让出来
        quickSortdetail(l,left-1);
        quickSortdetail(right+1,r);
    }

    public QuickSort(int j) {
        this.arr = new int[j];
        for (int i = 0; i < j; i++) {
            this.arr[i] = (int)(Math.random()*10);
        }
    }

    public static void main(String[] args) {
        QuickSort qs = new QuickSort(10);
        System.out.println(Arrays.toString(qs.arr));
        qs.quickSort();
        System.out.println(Arrays.toString(qs.arr));
    }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值