浅谈快排算法

什么是快速排序?

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

eg: 

 Int[]  arr  = [2,6,1,3,0];

        i++  ------>                                                                                                                        <------   j--

数组

下标

0

1

2

3

4

数组

元素

2

6

1

3

0

坑位

坑位1

坑位3

坑位4

          

坑位2

 

0

1

2

3

6

 

 

 

 

 

 


实现思路:挖坑填数;

int[] arr =[2,6,1,3,0];   

1、定义一个基准数 挖出第一个坑位;

2、由后向前找比基准数小的数,找到后挖出此数,将数填充到前一个坑中;j--

3、由前向后找比基准数大的数,找到后挖出此数,将数填充到前一个坑中;i++

4、重复 2、3 步骤;

5、最后一个坑位数填充基准数

最后数组元素排序;左边的数小于基准数;右边的数大于基准数


代码实现:

package Test2;

public class QuickSort{

  /**

   * 快速排序 start:左边开始索引; end:右边索引

   * */

  public static voidquickSort(int[]arr,intstart,intend){

     if(start<end){

       int index = getIndex(arr,start,end);

       quickSort(arr,0,index-1);

       quickSort(arr,index+1,end);

     }

  }

  public  static int getIndex(int[]arr, intstart, intend) {

     // TODOAuto-generated method stub

    int i = start,j=end;//左边开始索引  i;右边索引j

     int x =arr[i];//定义一个基准数 x

     while(i<j){

       //先从右向左比对,比x小于的

       while(i<j&&arr[j]>=x){

         j--;

       }

       if(i<j){

         arr[i] =arr[j];

         i++;

       }

       //再从左向右比对,比x大于等于的

       while(i<j&&arr[i]<x){

         i++;

       }

       if(i<j){

         arr[j] =arr[i];

         j--;

       }

     }

     arr[i] =x;

     return i;

  }


  public static voidmain(String[] args) {

     // TODOAuto-generated method stub

     int[] arr ={2,0,11,9,5,22,45,16};

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

     for(inti:arr){

       System.out.println(i);

     }

  }

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值