详细解读Java中的快速排序
来源:互联网 发布:originlab软件下载 编辑:程序博客网 时间:2024/05/29 09:46
快速排序是排序算法中非常优秀的算法之一。今天我们来分析一下快速排序的原理,算法以及空间复杂度和时间复杂度。
package com.test;public class QuickSort_5_9 { public static void main(String[] args) { // TODO Auto-generated method stub int[] a = new int[] { 5, 2, 6, 8, 1, 9, 4, 10, 7, 3 }; quick(a, 0, a.length - 1); print(a); } private static void quick(int[] a, int iMin, int iMax) { // TODO Auto-generated method stub //定义三个变量,i和j 的作用就是起到导航作用,ipivot作用是存放第一个数作为基准值,同时将数据数组中腾出一个位置进行来回改变值。 int i = iMin, j = iMax, ipiovt = a[i]; //i和j的值分别是最小下标和最大下标。同时作为导航使用 //判断i的值是否比j大,满足则直接返回,说明不满足基本条件 if (i >= j) { return; } //如果i一直小于j则进行如下操作如果仍旧满足a[j] > ipiovt就是右边起的数值一直比基准值大就将j导航标向左移动, while (i < j) { while (i < j && a[j] > ipiovt) { j--; } //进入下边这个操作说明基准值大于a[j]这时候我们需要将j下标对应的数放置到前方空缺的那个位置中就是i的下表对应的数值,然后i进行加一操作。 if (i < j) { a[i++] = a[j]; } //这个时候开始进行从左向右与基准值ipiovt比较。如果满足下边这个条件将i进行加一。 while (i < j && a[i] < ipiovt) { i++; } //执行下边的步骤说明a[i]>基准值,需要将a[i]的值放到j下标对应的位置。 if (i < j) { a[j--] = a[i]; } } //此时i和j相等就是此时中间空的位置,此时只需将ipivot放入到该位置即可。 a[i] = ipiovt; //进行递归操作 分为两部分,左边一部分,右边一部分,注意此时i的位置一定固定,此时不需要再考虑i下下标对应的数即可。 quick(a, iMin, i - 1); quick(a, i+1, iMax); }//执行输出方法。 public static void print(int[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } }}
总结由于该方法使用的是递归一分为二,二分为四,所以满足对数所以平均时间复杂度为Olog(n log n)。最坏的情况下是O(n^2)。空间复杂度为O(log n)
0 0
- 详细解读Java中的快速排序
- java 排序算法详细解读
- Java排序算法详细解读(1)
- Java排序算法详细解读(2)
- java排序算法详细解读(3)
- java 排序算法详细解读(4)
- java 排序算法详细解读(5)
- java中的快速排序
- 快速排序完全解读
- java 快速排序递归算法详细解析
- java中的快速排序实现
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Java实现的几个常用排序算法详细解读
- Discuz!论坛教程之DIY调用主题标签TAG修改方法
- tcp协议下,客户端向服务端发送一串文本,在服务端经过处理后,返回文本的大写
- hdu 5723 Abandoned country(最小生成树)
- 1069: 三进制小数
- js里面==和===的区别
- 详细解读Java中的快速排序
- hdu 6026 Deleting Edges
- java中的设计模式
- 创建类的对象的两种不同方式
- POJ 1074 Parallel Expectations 笔记
- 使用Maven导入jar包
- Singleton单例模式-如何防止JAVA反射对单例类的攻击?
- 基于tcp协议模拟多客户端并发的图片上传
- E-Aggressive cows