您的位置:首页 > 编程语言 > Java开发

快速排序

2016-05-12 18:53 429 查看
一、快速排序

    快速排序属于交换排序的一种,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;

  

 }

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java基础 快速排序