算法代码实现之三向切分快速排序,Java实现
2016-02-29 21:46
645 查看
封装成类:
测试:
输出:
[9, 0, 6, 5, 8, 2, 1, 7, 4, 3]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
package com.roc.algorithms.sort; /** * 三向切分快速排序 * 适合有较多重复元素的排序算法 * * @author roc */ public class ThreeWayQuickSort { public static void sort(int[] a) { sort(a, 0, a.length - 1); } //在lt之前的(lo~lt-1)都小于中间值 //在gt之前的(gt+1~hi)都大于中间值 //在lt~i-1的都等于中间值 //在i~gt的都还不确定(最终i会大于gt,即不确定的将不复存在) private static void sort(int[] a, int lo, int hi) { if (lo >= hi) { return; } int v = a[lo], lt = lo, i = lo + 1, gt = hi; while (i <= gt) { if (a[i] < v) { swap(a, i++, lt++); } else if (a[i] > v) { swap(a, i, gt--); } else { i++; } } sort(a, lo, lt - 1); sort(a, gt + 1, hi); } private static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } }
测试:
int[] a = {9, 0, 6, 5, 8, 2, 1, 7, 4, 3}; System.out.println(Arrays.toString(a)); ThreeWayQuickSort.sort(a); System.out.println(Arrays.toString(a));
输出:
[9, 0, 6, 5, 8, 2, 1, 7, 4, 3]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
相关文章推荐
- Java多线程之停止一个线程
- [转]Java Web基础——Action+Service +Dao三层的功能划分
- Java中的final
- Spring的Bean之Bean的基本概念[转]
- 利用MyEclipse连接数据库并自动生成基于注解或者XML的实体类
- 安卓异常java.lang.IllegalStateException: Content has been consumed
- [疯狂Java笔记]AWT容器简介
- java多线程系列01——多线程基础
- Hibenate错误汇总:java.lang.NoClassDefFoundError:
- Spring进阶之路(4)-容器中Bean作用域与集合类型配置
- Java学习之多态
- Java抽象类和接口的若干问题
- 开源框架spring详解-----AOP的深刻理解(1)
- 111. Minimum Depth of Binary Tree
- 南阳ACM 题目71:独木舟上的旅行 Java版
- Java中equals()方法和“==”的区别
- spring ioc 原理小解
- Java的反射机制的作用
- 【Java基础】RTTI与反射之Java
- hihocoder week 86 Spring Outing【思维】