我是靠谱客的博主 沉静香菇,最近开发中收集的这篇文章主要介绍java快速排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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快速排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部