JAVA入门-快速排序

快速排序(二分法)

效率较高经常被采用的方法

快速排序基本思想

1.先从数列中取出一个数作为基准数。
2.将比这个数大的数全放到它的右边
3.将小于或等于它的数全放到它的左边。
4.再对左右区间重复第二步,直到各区间只有一个数。

代码实现
//快速排序
 public static void main(String[] args) {     
  int[] a = {12,20,5,16,15,1,30,45,23,9,4,4};        
  int min = 0;        
  int max = a.length-1;       
  sort(a, min, max);       
  for (int i : a) {
   System.out.println(i);  
   } 
  }   
 /*  
 * 首先需要一个数组存放所有的数据  
 * 定一个开始位置和一个结束位置  
 * 选择一个数作为准基数  
 * 
 * */ 
 public static void sort(int a[],int min,int max) {  
  int key=a[min];//准基数      
  int start=min; //开始位置      
  int end =max;//结束位置             
  while(end>start) {  
   //循环条件是否数值交叉        
   //从后开始往前查找         
   while(end>start&&a[end]>=key) {          
    //如果找到的值大于基数值,那么继续往下找,end--          
    end--;         }          
   //如果找到的值小于基数值,那么进行值交换          
   if(a[end]<key) {
    int i=a[end];           
    a[end]=a[start];           
    a[start]=i;                   
    }                  
   //从前往后找         
   while(end>start&&a[start]<=key) {          
    //如果找到的值小于基数值,那么继续往下找,start++          
    start++;         }          
   //如果找到的值大于基数值,那么进行值交换          
   if(a[start]>key) {           
    int i=a[start];           
    a[start]=a[end];           
    a[end]=i;                   
    }        
   }               
  //这部分的数据都是小于准基数,通过递归在进行一趟快排       
  if(start>min) {         
   sort(a, min, start-1); 
   //开始位置为第一位,结束位置为关键索引-1        
   }                
  if(end<max) {         
   sort(a, end+1, max);  
   //开始位置为关键索引+1,结束位置最后一位       
   }                     
  }
使用位置

数据量大,元素规模大需要排序时使用快速排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值