快速排序算法(quickSort)
基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序数列。
应用场景
数据量大并且是线性结构
短处
有大量重复数据的时候,性能不好
单向链式结构处理性能不好(一般来说,链式都不使用)
代码实现
@Test
public void testQuickSort(){
int[] array=new int[]{3,2,1,5,6,4};
quickSort(array,0,array.length-1);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
/**
* 快速排序从小到大
* @param nums
* @param left
* @param right
*/
public void quickSort(int[] nums,int left,int right){
if(right-left<=0){
return;
}else if(left<right){
int middle=getMiddle(nums,left,right);
quickSort(nums,left,middle-1);
quickSort(nums,middle+1,right);
}else{
return;
}
}
/**
* 左边小右边大
* @param nums
* @param left
* @param right
* @return
*/
private int getMiddle(int[] nums, int left, int right) {
int pivot=nums[left];
while (left<right){
while (nums[right]>=pivot&&left<right){
right--;
}
nums[left]=nums[right];
while (nums[left]<=pivot&&left<right){
left++;
}
nums[right]=nums[left];
}
nums[left]=pivot;
return left;
}
快速排序算法就讲到这里,谢谢大家,再见!