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 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值