java快速排序算法(哨兵法)

java快速排序算法(使用哨兵实现)

本算法效率非常高!具体解释我已经在代码前面加了注释。具体原理也都写在里面了。

import java.util.Random;
public class Quick_Sort {
    //初始化方法
    public static void quicksort(int[] arry){
        //判断一下数组是否为空
        if(arry.length == 0){
            System.out.println("空数组排个屁????");
            return;
        }
        //排序初始化
        int left = 0;
        int right = arry.length-1;
        //进入快速排序函数
        q_s(arry,left,right);
    }
    //快速排序算法-哨兵模式
    public static void q_s(int[] arry,int left,int right){
        //限制递归的条件,当数组不能再分的时候结束递归
        if(left > right){
            return;
        }
        //将左右边界赋值给两个指针
        int low = left;
        int high = right;
        //以左边界的值为基准数
        int p = arry[left];
        //循环以两指针相遇为结束
        while(low < high){
            //先移动右指针,直到遇到小于基准值则停止
            while(arry[high]>=p && low<high){
                high--;
            }
            //再移动左指针,直到遇到大于基准值则停止
            while(arry[low]<=p && low<high){
                low++;
            }
            //当两个指针分别探测到逆序数值则进行交换
            if(low<high){
                //开始交换元素
                int cache = arry[low];
                arry[low] = arry[high];
                arry[high] = cache;
            }
            //当扫描完毕时,即可确定基准数的最终顺序位置
            //将基准数移动到目标位置即可。
            int cache = arry[low];
            arry[low] = arry[left];
            arry[left] = cache;
            q_s(arry,left,low-1);
            q_s(arry,high+1,right);
        }
    }
    //打印数组的方法
    public static void DaYin(int num[]){
        System.out.println("打印数组:-------------------------------------");
        System.out.print("[");
        for(int i=0;i<num.length;i++){
            System.out.print(num[i]+" ");
        }
        System.out.println("]");
        System.out.println("打印数组:-------------------------------------");
    }
    public static void main(String[] args) {
        //制造一个数组,大一点容量才能体现出快速排序的性能
        int[] arry = new int[500];
        Random r = new Random();
        for (int i = 0; i < arry.length; i++) {
            arry[i] = r.nextInt(100);
        }
        //打印创造好的数组
        DaYin(arry);
        //开始执行排序
        quicksort(arry);
        //查看排好序的数组
        DaYin(arry);
    }
}

运行结果:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值