快速排序(Java)

目录

文章目录

一、快排是什么?

二、思路步骤

1.确认分界点 x(轴数)

2.调整区间

3.递归处理左右两边

三、代码实现 (以数组头为轴数)

总结


一、快排是什么?

八大排序之一,主要采用的是分而治之的思想

二、思路步骤

1.确认分界点 x(轴数)

常用的三种

1.数组头的数作为分界点

2.数组尾的数作为分界点

3.数组中间的数作为分界点

2.调整区间

1.左边的是小于x的数

2.右边的是大于x的数

3.递归处理左右两边

三、代码实现 (以数组头为轴数)

1.主函数中调用快速排序算法

public static void main(String[] args) {

        int [] array = {5,4,8,7,2,6,10};

     //打印排序前的数组
        print(array);
     //调用快速排序算法  
        quick(array,0, array.length-1);
    //打印快排后的数组
        print(array);
}

2.快速排序函数

public static void  quick(int [] array,int left,int right){

        if(left>right){
            return;
        }
        int pivot = array[left];

        int i = left;
        int j = right;
        while(i != j){
             while(array[j] >= pivot && i < j){
                j--;
            }
            while(array[i] <= pivot && i < j){
                i++;
            }
            //如果左边找到大于轴数的元素的索引值,指针停下,如果右边找到小于轴数的元素的索引值指针停下
            //交换这两个元素
            swap(array,i,j);
            //交换后指针继续移动,直到两个指针相遇,交换指针相遇处的元素和轴数,需要再在外层套一个while循环
          }
        swap(array,i,left);
 //轴数和指针相遇的数交换位置后,表明第一轮的快排结束,进行第二轮的快排,原理一样,用递归传入参数
     //排第一轮轴数左边的数组
        quick(array,left,i-1);
        //排第一轮轴数右边的数组
        quick(array,j+1,right);


    }

3.交换数组中两个数的函数

   public static void swap(int [] array,int a,int b){
        int temp = array[a];
       array[a] = array[b];
       array[b] = temp;
   }

4.打印数组内容

  public static void print(int [] array){
        for (int i : array) {
            if(i!=array[array.length-1])
                System.out.print(i+",");
            else
                System.out.print(i);
        }

        System.out.println();
    }

总结

快速排序是分治思想的体现,先找到一个分界点,然后左边放入小的数,右边放入大的数,两边的数再找分界点,以此类推,递归调用,从而达到快速排序数组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值