简单排序算法时间空间复杂度分析及应用(3)-快速排序

简单排序算法时间空间复杂度分析及应用(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 stub
		if(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至j
		if(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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特科技软件开发工作室

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值