快速排序-java

快速排序的核心思想就是一个数为基准,然后从left找一个比他大的数,从right找一个比他小的数交换,然后把left和这个基准数交换,递归实现排序.
是分治和递归的结合

下面有两种实现方式




//快排
//一一个数为基准,然后从它的左右两边找一个交换位置.
public class Main11 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    int[] arr= {21,35,4,6,27,3,21,3};

        kp(arr,0,arr.length-1);

    for(int i=0;i<arr.length;i++){
        System.out.println(arr[i]);
    }

    }
  public static void kp(int[] arr,int head,int tail) {
        if (head >= tail || arr == null || arr.length <= 1) {
            return;
        }
        int index = arr[head];
        int left = head;
        int right = tail;
        while (left <= right) {

            while(arr[right]>index){
                right--;
            }
             while(arr[left]<index){
                left++;

            }
            if(left<right){
                int index1 = arr[left];
                arr[left]= arr[right];
                arr[right]=index1;
                ++left;
                --right;
            }
            else if(left==right){
                ++left;
            }
            kp(arr,head,right);
            kp(arr,left,tail);
        }

    }

        /*public static int getMiddle(int[] list, int low, int high) {
            int tmp = list[low];    //数组的第一个作为中轴
            while (low < high) {
                while (low < high && list[high] >= tmp) {
                    high--;
                }
                list[low] = list[high];   //比中轴小的记录移到低端
                while (low < high && list[low] <= tmp) {
                    low++;
                }
                list[high] = list[low];   //比中轴大的记录移到高端
            }
            list[low] = tmp;              //中轴记录到尾
            return low;                   //返回中轴的位置
        }
        public static void _quickSort(int[] list, int low, int high) {
            if (low < high) {
                int middle = getMiddle(list, low, high);  //将list数组进行一分为二
                _quickSort(list, low, middle - 1);        //对低字表进行递归排序
                _quickSort(list, middle + 1, high);       //对高字表进行递归排序
            }
        }
        public static void quick(int[] a2) {
            if (a2.length > 0) {    //查看数组是否为空
                _quickSort(a2, 0, a2.length - 1);
            }*/

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值