快速排序(Quicksort)是对冒泡排序的一种改进,也是基于交换的排序,采用了分治的思想。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
public class QuickSort {
public void quickSort(int array[],int low,int high){
int pivot; //划分后枢轴的位置
if(low<high){
pivot=Partition(array,low,high); //获取划分枢轴的位置
quickSort(array, low, pivot-1); //对划分后的左子序列递归排序
quickSort(array, pivot+1, high); //对划分后的右子序列递归排序
}
}
public int Partition(int array[],int low,int high){
int item; //用于存放枢轴元素的位置
int temp;
item=low;//以数组区间low-high的第一个元素作为枢轴元素
while(low<high){ //从数组两端交替向中间扫描,直到low=high
/*从右向左扫描,查找第一个关键字小于枢轴元素的数据元素*/
while(low<high && array[high]>=array[item])high--;
if(low<high){
temp=array[low];
array[low]=array[high];
array[high]=temp;
low++;
item=high;
}
while(low<high && array[low]<=array[item])low++;
if(low<high){
temp=array[low];
array[low]=array[high];
array[high]=temp;
high--;
item=low;
}
}
return item;
}
public static void main(String[] args) {
/*使用快速排序法进行排序*/
int array[]=new int[]{9,7,6,8,5,1,4,2,3}; //把待排序的数存放在数组中
int n=array.length;
QuickSort qs=new QuickSort();
qs.quickSort(array, 0, n-1);
for(int i=0;i<n;i++){
System.out.print(array[i]+" ");
}
}
}