算法设计与分析基础14快速排序
Posted cutter_point
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计与分析基础14快速排序相关的知识,希望对你有一定的参考价值。
package cn.xf.algorithm.ch04; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Test; public class QuikSort { public int hoarePartition(List data, int left, int right) { //当要比对的数据相差为1的时候,表示就只有一条数据要进行比较了 if(data == null || right - left <= 1 || left >= right) { return left; } int sour = (Integer) data.get(left); //以第一个元素起始作为分裂点 int i = left; //左边起始位置 int j = right; //右边起始遍历位置 do { //只要i在j的左边,就不断循环,知道i >= j do { ++i; } while((Integer) data.get(i) < sour); //只要j在i右边就循环 do { --j; } while((Integer) data.get(j) > sour); this.swap(data, i, j); } while(i < j); //交换完毕之后,吧分裂点后置到中间点 this.swap(data, i, j); this.swap(data, left, j); // return j; } /** * 交换数据 * @param data * @param index1 * @param index2 */ public void swap(List data, int index1, int index2) { int temp = (Integer) data.get(index1); data.set(index1, data.get(index2)); data.set(index2, temp); } public void quikS(List data, int left, int right) { if(left < right) { int mid = this.hoarePartition(data, left, right); quikS(data, left, mid); quikS(data, mid + 1, right); } } @Test public void test2() { List data = Arrays.asList(5,3,1,9,8,2,4,7); quikS(data, 0, data.size()); for(Object o : data) { System.out.print(o + "\\t"); } } public static void test1(List data) { data = null; } @Test public void test() { List data = Arrays.asList("1", "2", "3", "4", "5", "6"); QuikSort.test1(data); for(Object j : data) { System.out.println(j); } } }
显示结果:
以上是关于算法设计与分析基础14快速排序的主要内容,如果未能解决你的问题,请参考以下文章