快速排序(Quicksort)
是对冒泡排序的一种改进。
快速排序由C. A. R.Hoare在1962年提出。
基本思想:
通过一趟排序将要排序的数据分割成独立的两部分
其中一部分的所有数据都比另外一部分的所有数据都要小
然后再按此方法对这两部分数据分别进行快速排序
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一组数:3,4,6,1,2,7
代码实现如下:
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr=new int[] {3,4,6,7,2,7,2,8,0,9,1};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void quickSort(int arr[],int start,int end){
if (start<end){
//把第0个数作为标准数
int stared=arr[start];
//记录需要排序的下标
int low=start;
int high=end;
//循环找比标准数大的数和比标准数小的数
while (low<high){
//右边的数字比标准数大
while (low<high&&stared<=arr[high]){
high--;
}
//使用右边的数替换左边的数
arr[low]=arr[high];
//左边的数比标准数小
while (low<high&&stared>=arr[low]){
low++;
}
arr[high]=arr[low];
}
//把标准数赋给低所在的位置的元素
arr[low]=stared;
//处理所有小的数字
quickSort(arr,start,low);
//处理所有大的数字
quickSort(arr,low+1,end);
}
}
}
快速排序的特性总结:
- 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序
- 时间复杂度:O(N*logN)
- 空间复杂度:O(logN)
- 稳定性:不稳定