快速排序QuickSort

快速排序QuickSort

算法思路:

  1. 给定的数组,选择一个元素作为枢轴,所有比枢轴小的元素放在枢轴的左侧,比枢轴打的元素放在枢轴的右侧;
  2. 根据以上思路,递归地分别操作小于枢轴值的序列 和 大于枢轴值的序列,最终会排序完成;

动图演示:

QuickSort图示

图示中 黄色 柱代表的是枢轴

JAVA代码实现:

public class QuickSort {
    public static void quickSort(int[] arr,int low, int high){
        int i=low;
        int j=high;
        int index = arr[low];
        if (low>=high)//快速排序中,此条件语句不可少,否则会引起StackOverFlowError
            return;
        while (i<j){
            while(i<j &&arr[j]>index){//从右往左找到第一个小于枢轴的元素
                j--;
            }
            while(i<j && arr[i]<=index){//从左向右找到第一个大于枢轴的元素
                i++;
            }
            if(i<j){//大于枢轴的元素和小于枢轴的元素交换
                int tmp=arr[i];
                arr[i]=arr[j];
                arr[j]=tmp;
            }
        }
        arr[low]=arr[i];//调整枢轴的位置
        arr[i]=index;//调整枢轴的位置
      /*  for(int e:arr)
            System.out.println(e);*/
        quickSort(arr,low,i-1);//递归左侧子序列
        quickSort(arr,i+1,high);//递归右侧子序列
    }

    public static void main(String[] args) {
        int[] a ={8,4,5,9,0,3,2,6,1,7};
        quickSort(a,0,a.length-1);
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }

    }

}

三人行,必有我师焉。欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值