java排序之快排

这篇文章来谈谈快排,最近有一种感觉,只要有规律可循的代码,分解成为两部分以后效率就会提高很多。代码思想如下
 这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后递归分别处理大的和小的,
          这里需要注意的是我们在移动游标是需要的是加上等于分界的值,否则的话如果有相等的值就会进入死循环,
          很简单的来说,当以一个数为分界值的时候,那么另一个和他相同的数如果没有到边界是不会移动的

          ,但是无论是大的还是小的递归完成以后就一定会挨着分界值。

代码:

package www.jk.qsort;

import java.util.Arrays;

/**
 * 
 * @author jk 这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后递归分别处理大的和小的,
 *         这里需要注意的是我们在移动游标是需要的是加上等于分界的值,否则的话如果有相等的值就会进入死循环,
 *         很简单的来说,当以一个数为分界值的时候,那么另一个和他相同的数如果没有到边界是不会移动的
 *         ,但是无论是大的还是小的递归完成以后就一定会挨着分界值。
 * 
 */
public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = new int[] { 2, 1, 6, 7, 8, 5, 3, 5 };
		quickSort(a, 0, a.length - 1);
		System.out.println(Arrays.toString(a));
	}

	private static void quickSort(int[] a, int begin, int end) {
		//
		int tbegin = begin, tend = end;
		// 将第一个值作为快排序的分界值
		int pivot = a[begin];
		while (tbegin < tend) {
			// 如果两个游标没有交集,或者后面一直大于或等于分界值就一直向前移动
			while (tbegin < tend && a[tend] >= pivot) {
				--tend;
			}
			a[tbegin] = a[tend];
			// 如果两个游标没有交集,或者前面是小于或等于分界值,就一直向后头移动
			while (tbegin < tend && a[tbegin] <= pivot) {
				++tbegin;
			}
			a[tend] = a[tbegin];

		}
		// 将临界值赋值给游标的交集的地方
		a[tbegin] = pivot;
		if (begin < tend) {
			// 递归排序游标的左边
			quickSort(a, begin, tend - 1);
		}
		if (tbegin < end) {
			// 递归排序游标的右边
			quickSort(a, tbegin + 1, end);
		}

	}

}


  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值