快速排序又称划分交换排序,快速排序使用分治法策略来把一个序列分为两个子序列。递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了
/*
伪代码:
method quicksort(list list):
if list.size<2
return list
let pivot=list(0)
let lower=new list
let higher=new list
for each element e in between list(0) and the end of the list:
if e<privot
add e to lower
else add e to higher
let sortedlower=quicksort(lower)
let sortedhigher=quicksort(higher)
return soeredlower+pivot+sortedhigher
*/
Java代码
package main.java;
import java.util.ArrayList;
import java.util.List;
/**
* DateTime: 2016/10/15 12:34
* 功能:快速排序
* 思路:
*/
public class QuickSort {
public static List<Integer> quickSort(List<Integer> list){
//递归出口
if(list.size()<2) return list;//个数为0或1 时表示已经排好序了
final int index=list.get(0);
final ArrayList<Integer> begin=new ArrayList<>();
final ArrayList<Integer> end=new ArrayList<>();
for ( int i = 1; i <list.size() ; i++ ) {
if(list.get(i)<index){
begin.add(list.get(i));
}else {
end.add(list.get(i));
}
}
ArrayList resultList= (ArrayList) quickSort(begin);
resultList.add(index);
resultList.addAll(quickSort(end));
return resultList;
}
}
Junit测试代码
package test.main.java;
import main.java.QuickSort;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import static org.junit.Assert.assertArrayEquals;
/**
* QuickSort Tester.
*
* @author <Authors name>
* @since <pre>ʮ�� 15, 2016</pre>
* @version 1.0
*/
public class QuickSortTest {
@Before
public void before() throws Exception {
}
@After
public void after() throws Exception {
}
/**
*
* Method: main(String[] args)
*
*/
@Test
public void testMain() throws Exception {
//TODO: Test goes here...
}
/**
*
* Method: quickSort(List<Integer> list)
*
*/
@Test
public void testQuickSort() throws Exception {
//TODO: Test goes here...
Integer[] array={1,2,3,4,5,6,7,8};
ArrayList arrayList=new ArrayList();
arrayList.add(1);
arrayList.add(8);
arrayList.add(4);
arrayList.add(6);
arrayList.add(2);
arrayList.add(5);
arrayList.add(7);
arrayList.add(3);
assertArrayEquals(array, QuickSort.quickSort(arrayList).toArray());
}
}