博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
荷兰国旗问题来改进快速排序------排序4
阅读量:3937 次
发布时间:2019-05-23

本文共 924 字,大约阅读时间需要 3 分钟。

随机快速排序的细节和复杂度分析

可以用荷兰国旗问题来改进快速排序

时间复杂度O(N*logN),额外空间复杂度O(logN)

具体代码如下:

public static void quickSort(int[] arr) {   if (arr == null || arr.length < 2) {      return;   }   quickSort(arr, 0, arr.length - 1);}public static void quickSort(int[] arr, int l, int r) {   if (l < r) {      swap(arr, l + (int) (Math.random() * (r - l + 1)), r);      int[] p = partition(arr, l, r);      quickSort(arr, l, p[0] - 1);      quickSort(arr, p[1] + 1, r);   }}public static int[] partition(int[] arr, int l, int r) {   int less = l - 1;   int more = r;   while (l < more) {      if (arr[l] < arr[r]) {         swap(arr, ++less, l++);      } else if (arr[l] > arr[r]) {         swap(arr, --more, l);      } else {         l++;      }   }   swap(arr, more, r);   return new int[] { less + 1, more };}public static void swap(int[] arr, int i, int j) {   int tmp = arr[i];   arr[i] = arr[j];   arr[j] = tmp;}

加粗部分的解释 

最坏的时间复杂度:

最好的时间复杂度:

空间复杂度

转载地址:http://snuwi.baihongyu.com/

你可能感兴趣的文章
springboot整合redis
查看>>
springboot整合redis-lettuce
查看>>
SpringBoot集成WebSocket
查看>>
PowderDesigner逆向工程
查看>>
第一个activiti程序
查看>>
SpringBoot集成Activiti7
查看>>
用activiti开发流程管理系统
查看>>
开启我的CSDN记录本
查看>>
理解vue中export default与import
查看>>
node.js、npm、webpack的理解
查看>>
使用vue-CLI脚手架搭建的vue项目的目录介绍
查看>>
vue项目中,子组件和父组件参数的双向绑定
查看>>
vue项目的一级路由和二级路由的理解
查看>>
在vue项目中路径的理解(路径属于字符串类型,需引号应起来)
查看>>
路由的理解和使用
查看>>
Axios插件,Vue-resource插件的使用
查看>>
ES6(全称ECMAScript 6)标准de
查看>>
vue中特殊符号的理解如$
查看>>
部署到aliyun服务器的jar包应用程序自动运行命令
查看>>
maven命令
查看>>