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