快速排序算法描述:
快速排序过程:
①定义一个数组array,选择一个基准值key(通常是选第一个元素),定义两个基准指针low,high,初始时,low=0,high=array.length-1,key=array[low],
② 先从右往左比较元素跟key的大小,即high逐次减一,直到找到第一个比key小的元素,交换array[high]与array[low]的值。
③然后从左往右比较元素跟key的大小,即low逐次加一,找到第一个比key值大的元素,然后交换array[low]与array[high]的值。
④再次执行②③直到low=high,停止。
⑤当low=high时把数组array按照key值位置分裂成两个子数组,两个子数组都不包含key。
⑥递归执行上述步骤,直到每个子数组只有一个元素为止。
性能分析:算法时间复制度:O(nlogn),空间复杂度:O(1),不是稳定排序。
JAVA代码实现:
public class QuickSort {
/**
* 递归体
* 参数为:快速排序的数组,排序的起始为止,结束位置
*/
public static int quickSortUnit(int[] array,int low,int high) {
int key = array[low];
int temp;
boolean flag = true;
while (low != high) {
//从右往左遍历,找到第一个比key小的元素并交换位置
for (;high>low&&flag; ) {
if (array[high] <key) {
temp = array[high];
array[high] = array[low];
array[low] = temp;
flag = false;
}else{
high--;
flag = true;
}
}
//从左往右遍历,找到第一个比key大的元素并交换位置
for(;high>low&&!flag;) {
if (array[low] >key) {
temp = array[low];
array[low] = array[high];
array[high] = temp;
flag = true;
}else{
low++;
flag = false;
}
}
}
return high;
}
public static void quickSort(int[] array,int low,int high){
if(low >= high){
return;
}else{
int index = quickSortUnit(array,low,high);
//对左边排序
quickSort(array,low,index-1);
//对右边排序
quickSort(array,index+1,high);
}
}
public static void main(String[] args){
int[] array = {18,25,34,9,16,20,41,43,56,26};
quickSort(array,0,array.length-1);
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
程序运行结果: