Java 交换排序之快速排序

快速排序

原理: 在我们需要进行排序的数组中挑选出一个标准数(一般是第一位 )
例如:
[12,56,98,6,8,1,23,89,78,96] 将12 作为首位

=》 [(),56,98,6,8,1,23,89,78,96]

接下来 从右向左看 遇到比12小的数字不变 遇到比12小的数字就将该数字填入到括号中 并将其位置设置为一个新的括号,为其他数字的填入做准备

=》 [(1),56,98,6,8,(),23,89,78,96]

然后从左边依次寻找比标准数字大的数 放入括号并形成新的括号

=》 [(1),(),98,6,8,(56),23,89,78,96]

之后再从 (56)想左找 循环上面的过程

[(1),(8),(6),(),(98),(56),23,89,78,96]

当从两个方向进行比较的时候 开始的位置重合的话 就将12 填入 首次排序结束 之后就是 以标准数字所在位置作为分界点 左右两侧重复之前的操作 直到排序完成

代码实现:

public class QuickSort {
    public static void main(String[] args) {
//        交换排序之快速排序
        int[] arr=new int[]{12,56,78,3,35,37,64,96};
        sort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));

    }
    public static void sort(int [] arr,int start,int end){
        //设置递归结束的条件
        if(start<end){
            //选取第一个数字作为标准数字
            //  不写arr[0]的原因在于 后面的排序中 标准数字后面的那一位下标不为0
            int  stard=arr[start];
            //设置() 的位置
            int low=start;
            int high=end;
            //low<high   将数据分为左右两部分 即一边小一边大
            while(low<high){
                //进行比较   low high  括号的位置 确定 最后的结束条件
                while(low<high&&stard<=arr[high]){
                    high--;
                }
                //实现向括号里面的填充
                arr[low]=arr[high];
                //从左开始的比较
                while(low<high&&stard>=arr[low]){
                    low++;
                }
                arr[high]=arr[low];

            }
            //将标准值放到最后的括号中
            arr[low]=stard;   //放到 low或者是 start都是可以的
            sort(arr,start,low);
            sort(arr,low+1,end);  //递归的方式
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值