不一样的快速排序,可同时进行升序与降序

快速排序

  该排序算法被认为是目前最好的一种内部排序方法。但它是不稳定的。在最优情况下,是每次都平分数组。而在最差情况下,即选取了一个最大或最小的元素当做基准数,时间复杂度与空间复杂度都会变成最差。

最差情况

  当选取的基准数为最大(或最小)的情况,退化为冒泡排序。

代码如下

import java.util.Arrays;

public class QuickSort6 {
	public static void quickSort(boolean flag, int []arr, int low, int high) {
		if(low>=high) {
			return;
		}
		//1.定义基准数
		int t = arr[low];
		int l = low;	//记录最左边下标号
		int h = high;	//记录最右边下标号
		while(low < high) {
			if(flag) {
				//2.升序
				while(low<high && t <= arr[high]) {
					high--;
				}
				arr[low]=arr[high];
				while(low<high && t >= arr[low]) {
					low++;
				}
				arr[high]=arr[low];
			}else {
				//3.降序
				while(low<high && t >= arr[high]) {
					high--;
				}
				arr[low]=arr[high];
				while(low<high && t <= arr[low]) {
					low++;
				}
				arr[high]=arr[low];
			}
		}
		//4.当low=high时,跳出循环
		arr[low]=t;
		quickSort(flag, arr, l, low-1);
		quickSort(flag, arr, low+1, h);
	}
	public static void main(String[] args) {
		int[] arr1 = {44,41,88,46,99,56};
		int[] arr2 = {77,66,4,99,2,4,57};
		quickSort(true, arr1, 0, arr1.length-1);
		quickSort(false, arr2, 0, arr2.length-1);
		System.out.println("升序:"+Arrays.toString(arr1));
		System.out.println("降序:"+Arrays.toString(arr2));
	}
}

时间复杂度

最优: O(nlogn) 最差: O(n^2)
平均: O(nlogn)

空间复杂度

最优: O(logn) 最差: O(n)

ps:如有不足,期待您的指点,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值