Java实现快速排序

 快速排序和冒泡排序都属于交换排序,算法描述:在数据序列中找一个参照物,从数据序列两端开始搜索,比参照物小的,放在参照物前边,比参照物小的放在参照物后边

 

代码:

package per.data.paixu;

public class QuickSort {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] keys = new int[]{ 58, 68, 21, 22, 10};
		
		quickSort(keys,0,keys.length-1);

		System.out.println("\n\n"+"排序之后:");
		for (int i = 0; i < keys.length; i++) {
			System.out.print(keys[i] + "\t");
		}
	}
	
	//快速排序
	public static void quickSort(int[] keys, int begin, int end) {

		//判断begin和end都没有越界
		//判断begin < end
		if (begin >= 0 && end >= 0 && begin < keys.length && end < keys.length && begin < end) {

			//读取begin和end
			int i = begin;
			int j = end;
			//将i取出,当作参照物,相当于挖好了一个坑,所以需要先从后往前扫描
			int vot = keys[i];

			//当i=j的时候,表示扫描完成
			while (i != j) {
				
				//从后往前,扫描比参照物小的值的下标
				while (i < j && keys[j] >= vot) {
					j--;
				}
				//将比参照物小的值,放入一开始挖好的坑里边,同时又挖了一个坑
				if (i < j) {
					keys[i++] = keys[j];
				}
				
				//从前往后,扫描比参照物大的值的下标
				while (i < j && keys[i] <= vot) {
					i++;
				}
				//将比参照物大的值,放入前边挖好的坑中
				if (i < j) {
					keys[j--] = keys[i];
				}

			}

			//当i=j的时候表示一次扫描完成,此时会有一个多余的坑,把参照物放进去
			keys[i] = vot;
			
			//输出每一次的结果
			System.out.println(begin + ".." + end + ", vot=" + vot + " ");
			for(int iii = 0 ; iii < keys.length ; iii++){
				System.out.print(keys[iii]+"\t");
			}
			System.out.println();
			
			//递归参照物的后边
			quickSort(keys, begin, j - 1);
			//递归参照物的前边
			quickSort(keys, i + 1, end);
		}
	}

}

 

算法分析:

最坏情况:o(n^2)

最好情况:o(n * log2 n)

总之,当n比较大时且数据数列随机排列时,快速排序是“快速”的;当n较小,或者参照物选取不合适的时候,是比较慢的。

快速排序是不稳定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值