快速排序

一、快速排序
    快速排序属于交换排序的一种,1962年由C.R.A.Hoare提出,它采用了一种分治的策略,通常称为分治法。
1、算法思想:
   通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序的序列。
2、实现思路
   a、以第一个关键字k1为基数,将[k1,k2,k3....Kn]这个数据分成两部分,使左区域所有的值都小于等于k1,右区域所有的值都大于等于k1,最后确定两区域的中间位置,这个时候两个子区域的值处于无序状态。
   b、把左区域做为一个整体,用a步骤进行处理,右区域进行相同的处理。(即递归操作)
   c、重复a、b步骤,直到处理完毕。

快速排序算法的程序:

public class SortUtils {
 
 
 public static void quickfastSort(int[] array){
  
  if(array.length > 0){
   fastSort(array,0,array.length-1);
  }
 }
 
 public static void fastSort(int[] array,int low ,int high ){
  
  if(low < high){
   int middle=findMiddle2(array,low,high);
   fastSort(array, low, middle-1);
   fastSort(array, middle+1, high);
  }
  
 }

 public static int findMiddle(int[] array,int low ,int high){
  
  int temp=array[low];
  
  while(low<high){
   
   while(low<high && temp<array[high]){
    high--;
   }
   array[low]=array[high];
   
   
   while( low<high &&  temp>array[low]){
    low++;
   }
   array[high]=array[low];
   
  }
  array[low]=temp;
  
  return low;
  
 }
 
public static int findMiddle2(int[] array,int low ,int high){
  
  int temp=array[low];
  
  while(low<high){
   
   while(temp<array[high]){
    high--;
   }
   if(low<high){
    array[low]^=array[high];
    array[high]^=array[low];
    array[low]^=array[high];
   }
   
   
   
   while(temp>array[low]){
    low++;
   }
   
   if(low<high){
    array[high]^=array[low];
    array[low]^=array[high];
    array[high]^=array[low];
   }
   
   
  }
  
  
  return low;
  
 }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值