常见排序算法之快速排序
2017-07-20 16:35
232 查看
快速排序是一种分区交换排序,是目前已知实测最快的一种排序算法.
6.快速排序
算法思想
快速排序的基本思想是,通过一趟划分将数组或线性表划为左部,右部,和基准值.其中左部都比基准值小,右部都比基准值大.
(1)在数组中选择一个枢纽元key,一般情况下选取第一个数据
(2)将所有比key值小的数据移到key值左边,将大于key值的数据移到key值右边.
(3)将左部和右部分别递归重复第二步,直到所有元素排好序位置
示意图
代码演示
快排主体
划分过程
算法性能分析
算法的最好时间复杂度为O(nlong2n)
最坏时间复杂度为O(n2)
平均时间复杂度为O(nlong2n)
6.快速排序
算法思想
快速排序的基本思想是,通过一趟划分将数组或线性表划为左部,右部,和基准值.其中左部都比基准值小,右部都比基准值大.
(1)在数组中选择一个枢纽元key,一般情况下选取第一个数据
(2)将所有比key值小的数据移到key值左边,将大于key值的数据移到key值右边.
(3)将左部和右部分别递归重复第二步,直到所有元素排好序位置
示意图
代码演示
/** * @param array * 快速排序 */ public static void quickSort(int[] array) { if(array.length>0){ _quickSort(array, 0, array.length-1); }else{ System.out.println("请输入非空数组!"); } }
快排主体
/** * @param array * @param left * @param right * 快速排序主体 */ public static void _quickSort(int[] array,int left ,int right) { if(left<right){ //划分 int middle=patition(array,left,right); _quickSort(array, left, middle-1); //对左边快排 _quickSort(array, middle+1, right);//对右边快排 } }
划分过程
/** * @param array * @param left * @param right * @return middle 中枢元下标 * 快排划分 */ private static int patition(int[] array, int left, int right) { int middle; int key=array[left]; while(left<right){ while(array[right]>=key&&left<right){ right--; } array[left]=array[right]; while(array[left]<key&&left<right){ left++; a7aa } array[right]=array[left]; } array[left]=key; middle=left; return middle; }
算法性能分析
算法的最好时间复杂度为O(nlong2n)
最坏时间复杂度为O(n2)
平均时间复杂度为O(nlong2n)
相关文章推荐
- 快速排序以及常见排序算法性能对比
- 常见排序算法之快速排序
- Java实现常见的排序算法之快排(快速排序)
- 直接插入排序、折半插入排序、冒泡排序、快速排序的算法实现
- 排序算法之快速排序
- Java常见排序算法之堆排序
- 基础算法--排序:之快速排序
- 常用排序算法之快速排序
- 算法基础之排序—快速排序
- 常见排序算法整理(三)----归并排序、快速排序
- OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序
- 排序算法之快速排序
- PHP常见排序算法整理学习
- 面试常见5个算法套装,4个排序+二分查找
- 排序算法之快速排序
- 基础排序算法之快速排序(Quick Sort)
- 算法熟记-排序系列-快速排序
- 算法有插入排序,堆排序,合并排序,快速排序和stooge排序
- 经典排序算法之快速排序
- 挖掘算法中的数据结构(三):O(n*logn)排序算法之 快速排序(随机化、二路、三路排序) 及衍生算法