java中的快速排序算法

快速排序时间复杂度为nlogn

public static void main(String[] args) {
	// 原始数据
	int[] arr = new int[]{2, 100, 4, 5, 26, 8, 89, 12, 15, 19, 37, 49, 51, 66};
	// 将 首尾数据之间的所有数据 进行快速排序
	qksort(arr, 0, arr.length - 1);
	// 打印排序结果
	for(int i = 0; i < arr.length; i++) {
		System.out.print(arr[i] + "\t");
	}
}
// 封装快速排序方法
public static void qksort(int[] arr, int start, int end) {
	// start、end分别接收排序范围的起始索引
	if(start < end) {
		// 默认选中范围中第一个元素值作为本次循环的判断基准
		int base = arr[start]; 
		// 头指针指向的索引
		int low = start;
		// 尾指针指向的索引
		int high = end + 1;
		// 开始一轮循环
		while(true) {
			// 将base从前往后依次与范围中的每一项做大小校验,如果某项大于base,就跳出循环,头指针就是此项的索引
			while(low < end && arr[++low] <= base) ;
			// 将base从后往前依次与范围中的每一项做大小校验,如果某项小于base,就跳出循环,尾指针就是此项的索引
			while(high > start && arr[--high] >= base ) ;
			if(low < high) {
				// 如果头指针小于尾指针,交换两个指针指向的数据,然后再次进入循环
				exchange(arr, low, high);
			} else {
				// 如果头指针大于尾指针,说明[start, end]范围的数据已全部判断完成,跳出循环
				break;
			}
		}
		// 将base和尾指针high指向的数据进行交换,这样以base为中心,就可以截取出来左右两部分小范围
		exchange(arr, start, high);
		// 对左部分范围进行快速排序,递归
		qksort(arr, start, high - 1);
		// 对右部分范围进行快速排序,递归
		qksort(arr, high + 1, end);
	}
}
// 交换两个索引的数据
public static void exchange(int[] arr, int a, int b) {
	int temp = arr[a];
	arr[a] = arr[b];
	arr[b] = temp;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值