简单排序算法时间空间复杂度分析及应用(3)-快速排序
来源:互联网 发布:软件自学网站大全 编辑:程序博客网 时间:2024/06/07 04:00
简单排序算法时间空间复杂度分析及应用(3)-快速排序
和之前的两种算法比较:
1.快速算法适合在n值(排序规模比较大)较大的场景下使用,快速排序算法时间会少一点。
2.冒泡排序和插入排序适合n值较小的场景下使用,如果待排序区并不是都杂乱无序,即有些区域是有序
的,使用冒泡排序和插入排序比较好一点。
3.快速排序适合用在次序分布随机的场景下应用。
快速排序过程中涉及到的新概念是:确定区元。该算法运用分层递归的思想,每一个递归层都会确定两个确定区元,然后每个确定区元下面又会确定两个区元,直至一个区元或者没有区元。
确定区元:指的是多个区元之间已经确定关系的待确定区域,即在某个方向上(由左向右或由右向左),区元的所有数据都小于或这都大于后面其他区元的所有数据,但是这些区域中的数都是未确定节点,即没经过排序的。这些区域被称为确定区元。
如下图所示
一般快速排序会把最后一个数据节点当作中间比较元素,这个元素插在两个确定区元的中间,然后区元内部再递归快速排序下去,
快速排序的图解:
快速排序java实现:
/* * 快速排序 quickSort * 快速排序时间复杂度nlog(n); * @param 输入true为增序列,false为降序 */public static void quickSort(boolean flag){int [] arr = array;System.out.println(arr.length);quicksort(arr , 0 , arr.length - 1 , flag);}private static void quicksort(int[] arr, int i, int j , boolean flag) {// TODO Auto-generated method stubif(i >= j)return; int p = i , q = i , k ;for( ; q < j ; ++ q){if((arr[q] < arr[j]&&flag)||(arr[q] > arr[j] && !flag)){ k = arr[q];arr[q] = arr[p];arr[p] = k;++p;}}//将中间比较元素放到连两个确定区元的中间,区元X:i至p-1。确定区元Y:p+1至jif(p != q){k = arr[q];arr[q] = arr[p];arr[p] = k;}//递归快速排序两个确定区元。quicksort(arr , i , p-1 , flag);quicksort(arr , p+1 , j , flag);}
下面几个文章等再分析几个排序算法后,会分析比较这些算法的不同。
0 0
- 简单排序算法时间空间复杂度分析及应用(3)-快速排序
- 简单排序算法时间空间复杂度分析及应用(6)-鸡尾酒排序(双冒泡排序)
- 简单排序算法时间空间复杂度分析及应用(1)-冒泡排序
- 简单排序算法时间空间复杂度分析及应用(2)-插入排序
- 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
- 简单排序算法时间空间复杂度分析及应用(5)-堆排序
- 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
- 简单排序算法时间空间复杂度分析及应用(8)-归并排序
- 常用排序算法的时间和空间复杂度及算法时间复杂度的简单计算
- 快速排序及时间复杂度分析
- 各种排序算法及时间&空间复杂度详解(一)简单排序算法
- 各种排序算法时间复杂度和空间复杂度分析
- 各种排序算法时间复杂度及空间复杂度
- 各种排序算法比较及时间复杂度,空间复杂度
- 堆排序算法及时间复杂度分析
- 排序算法空间、时间复杂度
- 排序算法空间、时间复杂度
- 排序算法空间、时间复杂度
- 阿里Maven仓库 -- Settings.xml
- API的相关类
- 单链表实现约瑟夫环
- Qt实现简单的TCP网络电子词典(带界面,能并发)
- HDU5545-The Battle of Guandu
- 简单排序算法时间空间复杂度分析及应用(3)-快速排序
- Unity3d神奇的粒子海洋
- Linux和win7(win10)双系统时间错误问题 时间相差8小时
- ReactNative iOS运行再次出错:No bundle URL present
- QT 5.4+ OpenGL编程
- 3.[个人]C++线程入门到进阶(3)----线程同步之关键段CS 与临界区
- 2017年暑期前端实习-阿里编程题
- leetcode Keyboard Row
- 一个简单的SpringMVC需要哪些jar包[Spring4.x]