Java ArrayList实现快速排序(D&C)

分而治之的方法,分解列表直到满足基线条件,默认选取的基准值为当前列表的第一个元素(替换代码为中间元素)。ArrayList相较于Int[]更容易实现,不过借助了ArrayList的方法还是有取巧的地方。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class RecursiveTestArrayList {

        //排序方法
	public static ArrayList<Integer> quickSort(ArrayList<Integer> arr) {

		int pivot = arr.get(0); //可替换代码
		//int mid = arr.size()/2;
		//int pivot = arr.get(mid);
		ArrayList<Integer> smaller = new ArrayList<Integer>(); //放置小于基准值的数据
		ArrayList<Integer> bigger = new ArrayList<Integer>(); //放置大于基准值的数据

                //分解当前列表的数据
		for(int i=1; i<arr.size();i++){ //替换i=0
			//if(i == mid)
			    //continue;
			//else
			if(pivot >= arr.get(i)) 
				smaller.add(arr.get(i));
			else 
				bigger.add(arr.get(i));
		}
        
                //递归调用
		if(smaller.size() > 1) 
			quickSort(smaller);
		if(bigger.size() > 1) 
			quickSort(bigger);

		arr.removeAll(arr);
		arr.addAll(smaller);
		arr.add(pivot);
		arr.addAll(bigger);

		return arr;
	}
	
	public static void main(String[] args) {
        
                //初始化列表
		ArrayList<Integer> arrList = new ArrayList<Integer>();
		ArrayList<Integer> arrListFinal = new ArrayList<Integer>();
		List<Integer> listA = Arrays.asList(9,5,4,10,0,1,2,6,3);

		arrList.addAll(listA);

		System.out.println("Before Sort:");
		for(int i=0; i<arrList.size(); i++) 
			System.out.print(arrList.get(i)+"  ");

		arrListFinal.addAll(quickSort(arrList));

		System.out.println(" ");
		System.out.println("After Sort:");
		for(int j=0; j<arrListFinal.size(); j++) 
			System.out.print(arrListFinal.get(j)+"  ");

	}
}
运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值