快速排序

       快速排序,一种沿用递归的排序方式,其实原理也非常简单,选准一个基数(数组当中一个元素),分别使用前序和倒序的方式遍历数据,将小于基数的放在基数左边,将大于基数的放在基数右边,然后再将两个分成两个数据重新排序,依次类推。下面以一个数据为例子来说明下这个过程吧。24,8,1,44,13,34,11,64,23,98,43,25

 

从左往右遍历,找到第一个比基数24大的数据,从右往左找到第一个比基数小的数据,两者对调(44和23呼唤)
24,8,1,23,13,34,11,64,44,98,43,25,
循环上一个步骤,将11和34对调,最后的目的是比24小的再一边,比24大的在一边
24,8,1,23,13,11,34,64,44,98,43,25,
将24插入两者中间,这是将原来数据分成两个数组,一个比24大一个比24小,下面来对两个数据分别做上述排序。
11,8,1,23,13,24,34,64,44,98,43,25,
下面以11为基数来做同样的排序,依次类推
1,8,11,23,13,24,34,64,44,98,43,25,
1,8,11,23,13,24,34,64,44,98,43,25,
1,8,11,23,13,24,34,64,44,98,43,25,
1,8,11,13,23,24,34,64,44,98,43,25,
1,8,11,13,23,24,34,64,44,98,43,25,
1,8,11,13,23,24,34,64,44,98,43,25,
1,8,11,13,23,24,34,25,44,98,43,64,
1,8,11,13,23,24,25,34,44,98,43,64,
1,8,11,13,23,24,25,34,44,98,43,64,
1,8,11,13,23,24,25,34,44,43,98,64,
1,8,11,13,23,24,25,34,43,44,98,64,
1,8,11,13,23,24,25,34,43,44,98,64,
1,8,11,13,23,24,25,34,43,44,64,98,
1,8,11,13,23,24,25,34,43,44,64,98,
1,8,11,13,23,24,25,34,43,44,64,98,
1,8,11,13,23,24,25,34,43,44,64,98,
 

 

下面贴一个代码的算法:

 

package com.patent.test;

public class QuictSort {
	static int left = 0;
    static int right = 0;
    static int point = 0 ; 
    public static int[] sort(int[] pData,int left,int right)   
    {    
      int i,j;   
      int middle,temp;   
      i = left;   
      j = right;   
      middle = pData[left];   
      //将小于middle的数据放在middle的左边,将大于middle的数据放在middle右边
      while(true)   
      {   
         //将大于基数和小余基数middle的进行分割
          while((++i)<right-1 && pData[i]<middle);   
          while((--j)>left && pData[j]>middle);   
          if(i>=j)   
              break;   
          temp = pData[i];   
          pData[i] = pData[j];   
          pData[j] = temp;   
          

      }   
      
      pData[left] = pData[j];   
      pData[j] = middle;   
  
      if(left<j)    
    	  sort(pData,left,j); 
      
    
    
      if(right>i)    
    	  sort(pData,i,right);   
      
      return pData;
    }   
	
	public static void main(String[] args){
		int[] array = {24,8,1,44,13,34,11,64,23,98,43,25};
		int[] arraya = QuictSort.sort(array,0,array.length);
		for(int i=0 ; i<arraya.length;i++){
			System.out.print(arraya[i]+",");
		}
		System.out.println();
		
	}
}
//代码部分内容借鉴别人的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值