java快速排序
来源:互联网 发布:centos apache配置 编辑:程序博客网 时间:2024/06/16 23:38
1、此算法平均时间复杂度:O(nlog2n)
是目前基于比较的内部排序中被认为是最好的一种排序算法。当待排序的关键字是随机分布时,快速排序的平均时间最短。
2、空间复杂度:O(log2n)
3、不稳定排序算法
下面举例说明为何快速排序是一种不稳定排序算法:
0 1 2 3 4 5 6(位号)
4 2 1 6 3 5 3
支点=4
此时先4和3比较,于是3被放到0号位
支点再和2、1比较,都小于4,所以2、1位置不变。
支点和6比较,小于6,所以将6放到了6号位(此号位上的3被移到了0号位),将4放到3号位。
一轮下来的结果:3 1 2 3 4 5 6
此时,两个相等数3的相对位置就变换了,所以称此算法为不稳定算法。
具体代码:
import java.util.Arrays;public class QuickSort {/** * 快速排序 * * 思路: * 1、目标支点定位:拿初始支点和两端数据交替的进行比较。每一轮adjust()下来,目标支点左边的数值比支点小,右边的数值大于等于支点。 * 2、左右再分别进行目标支点的定位。 * * 全部目标支点都找到时,即排序完成。 * */public static void main(String[] args) {int[] arr = {3,1,3,2,4,2,3};sort(arr, 0, arr.length-1);//sort(arr, arr.length-1, 0);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr, int low, int high) {if(low < high) {//low>=high的情况无意义int pivotPosition = adjust(arr, low, high);//支点定位sort(arr, low ,pivotPosition-1);//支点左边递归定位sort(arr, pivotPosition+1, high);//支点右边递归定位}}//支点定位public static int adjust(int[] arr, int low, int high) {int pivot = arr[low];//初始支点为low位上数while(low < high) {while(low<high && compare(pivot, arr[high]) <= 0) {//支点和高位比,比高位小,就high自减继续比。high--;}arr[low] = arr[high];//支点比高位大时,就将高位放到low位while(low<high && compare(pivot, arr[low]) > 0) {//再将支点和低位比较,比低位数大,low 自增继续比low++;}//找到比支点大的低位,就将此低位数放到此时的high位上。arr[high] = arr[low];arr[low] = pivot;//将支点放在此时的low位置}System.out.println("支点:"+arr[low]);return low;}//数值比较public static int compare(int num1, int num2) {return num1-num2;}}
//结果:
支点:3
支点:2
支点:4
支点:3
[1, 2, 2, 3, 3, 3, 4]
请按任意键继续. . .
- 排序-快速排序-Java
- java排序之快速排序
- Java排序算法 快速排序
- 快速排序(java排序)
- java 快速排序,冒泡排序
- 算法:排序----Java快速排序
- 【交换排序】快速排序--Java
- java 插入排序+快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java排序算法:快速排序
- Java排序-快速排序
- Java排序算法:快速排序
- Java排序算法--》快速排序
- JAVA排序算法---快速排序
- Java 快速排序 归并排序
- Java排序算法--快速排序
- java 冒泡排序、快速排序
- Socket类的一些方法
- PHP网站顶部添加include文件后不居中出现一空行
- 使用Spring.Net进行WebService开发(三)Spring.Net容器相关知识
- 剪不断,理不乱——数据库中主外键的关系
- eclipse内python的中文处理
- java快速排序
- poj 棋盘问题
- hdu1711 KMP应用之详细讲解
- VC中使用GetModuleFileName获取应用程序路径
- Map以自定义类做为键值
- Android程序编译原理之浅析
- CSP的注册
- android手机短信总结
- 数对之差的最大值