1. 程式人生 > >一個簡單的拿集合實現的快速排序(分治式遞迴)

一個簡單的拿集合實現的快速排序(分治式遞迴)

時間 :2018年11月8號

作者:我想做個體麵人

快速排序

package cn.itlaobing.date1108;

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

public class Fish {

	public static void main(String[] args) {
         
		List<Integer> lists = new ArrayList<>();
		//呼叫集合的add方法往集合中新增元素
		lists.add(5);
		lists.add(10);
		lists.add(9);
		lists.add(7);
		//呼叫sort方法對集合進行排序
		sort(lists);
		//迭代lists集合輸出排序之後的元素
		for(Integer i:lists) {
			System.out.print(i+"\t");
		}
		
	}	
	/**
	*建立一個公有的靜態的無返回值的sort() 方法
	*以便於在main函式中呼叫
	**/
	public static void sort(List<Integer> lists) {
	
		if(lists.size()>1) {
		    //定義三個儲存中間變數,最小值,最大值
			List<Integer> smaller = new ArrayList<>();
			List<Integer> same = new ArrayList<>();
			List<Integer> lagger = new ArrayList<>();
			
			Integer choseItem = lists.get(lists.size()/2);
			//通過foeach語句來迭代lists集合
			for(Integer i:lists) {		
			   //比較中間變數與迭代到的元素大小,分別將其新增到不同的集合中
				if(choseItem>i) {
					smaller.add(i);
					
					}else if (choseItem<i) {
						lagger.add(i);
						
						}else {
							same.add(i);
						}
				}
            //採用遞迴的方式對元素進行排序
			sort(smaller);
			sort(lagger);
			//排序所有元素之後,將lists集合清空
			lists.clear();
			//將排序之後的元素新增到lists集合之中
			lists.addAll(smaller);
			lists.addAll(same);
			lists.addAll(lagger);		
		}
	
	}

}