快速排序简单实现

/**
 * 快速排序
 */
public class QuickSort extends AbstractSort {

	/*
	 * 排序步骤 
	 * 1.设定关键字,基准 
	 * 2.划分数组 
	 * 3.执行排序(递归按关键字,划分子数组,左边放小的,右边放大的,最终迭代完成)
	 */
	@Override
	public void execSort(int[] arr) {
		this.sort(arr, 0, arr.length - 1);
	}

	// 以中间项为基准
	private void sort(int[] arr, int left, int right)
	{
    	if (left >= right) return;
        int middle = arr[(left + right) / 2];
        int i = left - 1;
        int j = right + 1;
        while (true)
        {
            while (arr[++i] < middle) ;
            while (arr[--j] > middle) ;
            if (i >= j) break;
            super.swap(arr, i, j);
        }
        sort(arr, left, i - 1);
        sort(arr, j + 1, right);
	}

}
/**
 * 排序测试
 */
public class MySortTest {

	int[] arr = { 10, 9, 3, 1, 2, 8, -9, 4 };
	AbstractSort sort;

	@Before
	public void before() {
		System.out.println("开始排序...");
	}

	@After
	public void after() {
		System.out.println(sort.getClass().getSimpleName() + " 排序完成 !");
		sort.displayAll(arr);
		System.out.println();
	}

	@Test
	public void bubbleSort() {
		sort = new BubbleSort();
		sort.execSort(arr);
	}

	@Test
	public void selectionSort() {
		sort = new SelectionSort();
		sort.execSort(arr);
	}

	@Test
	public void insertSort() {
		sort = new InsertSort();
		sort.execSort(arr);
	}
	
	@Test
	public void quickSort() {
		sort = new QuickSort();
		sort.execSort(arr);
	}

}
/**
 * 排序算法抽象基类
 */
public abstract class AbstractSort {

	/**
	 * 执行排序
	 */
	public abstract void execSort(int[] arr);

	/**
	 * 交换变量
	 */
	protected void swap(int[] arr, int a, int b) {
		int temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

	/**
	 * 显示数组
	 */
	public void displayAll(int[] arr) {
		System.out.println(Arrays.toString(arr));
	}

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值