java 快速排序算法及原理

 

  简单,精炼,完美是我写代码的思想。我不喜欢写了很多,最后谁也看不懂。那是在浪费读者的时间,也是浪费自己的时间。好了步入正题,今天我分享一下java的快速排序原理和算法,快速排序算法也是用的最多的一个排序算法。效率也快。如下:

 

 快速排序算法原理:

      例如:待排序的数组array的值分别是:(初始关键数据X:=49)

                   array[1]     array[2]     array3]     array[4]     array[5]      array[6]     array[7]:

                     23               55               32            21               12                 16         6     

       注:我是把23最为key,一般都是把数组的[0]作为key。

     

进行第一次交换后:   6        55       32       21      12      16       23

进行第二次交换后:   6        23       32       21      12      16       55

行第三次交换后:   6        16       32       21      12      23      55

进行第四次交换后:   6        16      23       21      12      32      55 

进行第五次交换后:   6        16      12       21      23      32       55 

 

第一次结束的结束为:

   {6,16,12,21}  23   {32,55}

  把原来的数组分成了2个数组,比key的值(23) 小的为一组,大的为一组。然后再对这两个数组进行排序。

 

代码:

QuickSearch.java 源码

 

public class QuickSearch {
 
  /**
     * 交换指定数组a的两个变量的值
     * @param a 数组应用
     * @param i 数组下标
     * @param j 数组下标
     */
 public void swap(long[] array,int i,int j)
 {
  if(i==j) return ;
  long temp = array[i];
  array[i] = array[j];
  array[j] = temp;
  
 }
 
 /**
     *
     * @param array 待排序数组
     * @param low 数组下标下界
     * @param high 数组下标上界
     * @return pivot
     */
 public int partition(long[] array,int lower,int hight)
 {
  
  //当前位置为第一个元素所在位置
  int position = lower;
  //采用第一个元素为轴
  long pivot = array[position];
  for(int i = lower+1;i<=hight;i++)
  {
   if(array[i]<pivot)
   {
    position++;
    swap(array,position,i);
   }
  }
  swap(array,lower,position);
  
  return position;
 }
 
 /**
     * 快速排序实现
     * @param array
     * @param low
     * @param high
     */
 public void quickSort(long[] array,int lower,int hight)
 {
  if(lower <hight)
  {
   //分成两组
   int pivot = partition(array, lower, hight);
   //递归
   quickSort(array,lower,pivot-1);
   //递归
   quickSort(array,pivot+1,hight);
  }
 }

}

测试代码:

public class QuickMain {

 public static void main(String[] args) {

  QuickSearch sort = new QuickSearch();
  long[] array = new long[]{1,33,5,23,67,87,42,65,234,53,13,16,17};
  sort.quickSort(array, 0, array.length-1);
  for (long l : array) {
   System.out.println(l+"    ");
  }
 }

}

 运行结果:

1   
5   
13   
16   
17   
23   
33   
42   
53   
65   
67   
87   
234 

     谢谢大家!希望关注我的下一篇文章。

 

  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值