排序算法——快速排序

快速排序又称划分交换排序,快速排序使用分治法策略来把一个序列分为两个子序列。递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了

这里写图片描述

/*
伪代码:
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());

}


} 

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值