快速排序

package com.wlf.array;

public class QuickSort {

	/*
	 * 快速排序 时间复杂度:O(n)-0(n²) 空间复杂度O(1),需要一个辅助空间作参考。
	 * 
	 * 可以简单理解为"挖坑填数"+"分治法(递归)" 
	 * 先取一个参考数x,比x小放其左边,反之放右边。(以x参考,相当于在x处挖了个坑,那么就必须填坑)
	 * 
	 * 先由后往前找比x小的,找到后,把这个数放到x位置填坑,此时这个数原来的位置就有了一个坑
	 * 在由前往后找,找到比x大的,把这个数填到上个数的坑中。
	 * 依次循环(注意:每次循环从挖过坑的后一位开始),由后往前,挖坑填坑,再又前往后。
	 * 直到找到与上个数相同的数时停止,把参考数x放到这个数的位置上。
	 */
	void quick_sort(int s[], int l, int r)// 返回调整后基准数 l=0,r=s.length的位置 //
											// (friendly)
	{
		if (l < r) {
			// Swap(s[l], s[(l + r) / 2]); //以中间的数作为基准数的,将中间的这个数和第一个数交换
			int i = l, j = r, x = s[l];
			while (i < j) {
				while (i < j && s[j] >= x)// 从右向左找第一个小于x的数	
					j--;
				if (i < j)
					s[i++] = s[j];
				
				while (i < j && s[i] < x)// 从左向右找第一个大于等于x的数
					i++;
				if (i < j)
					s[j--] = s[i];
			}
			s[i] = x;
			// 递归调用
			quick_sort(s, l, i - 1);
			quick_sort(s, i + 1, r);
		}
	}
//    //test
//	public static void main(String[] args) {
//		int[] array = new int[] { 123, 23, 32, 32, 4, 6, 13, 93, 33, 23, 45 };
//		QuickSort a = new QuickSort();
//		a.quick_sort(array, 0, 10);
//		for (int i = 0; i < array.length; i++) {
//			System.out.print(array[i] + " ");
//
//		}
//
//	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值