Java快速選擇排序簡易版(原創)

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

/**
 * @author shany
 * @date 2018年9月10日 下午4:47:45 
 * @version V1.0  
 */

/**
 * @author Administrator
 *
 */
public class Kspx {
	// 用於記錄運行次數
	static int num = 0;
	// 用於防止循環未結束問題
	static List<Integer> arr = new ArrayList<Integer>();

	// 用於排序
	public List<Integer> core_sy(List<Integer> list1) {
		List<Integer> list = new ArrayList<Integer>(list1);
		// 循環遍歷
		for (int i = 0; i < list.size(); i++) {
			for (int j = i + 1; j < list.size(); j++) {
				// 比這個數小,且在這個數後面的數
				if (arr.get(j) < arr.get(i)) {
					System.out.println("第" + num++ + "次操作" + "i=" + i + "  j="
							+ j);
					// System.out.println("i="+list.get(i)+"  j="+list.get(j));
					// 先存儲要移動的數據
					int temp = list.get(j);
					// 先移除再添加
					list.remove(j);
					list.add(i, temp);
					// if(is_sure(list))	test
					// return arr;			test
					// 同步list裏面的數據
					arr = list;
					// 查看本次結果
					output(list);
					// 遞歸
					core_sy(list);
				}
			}
			//如果運行到末尾了,則排序結束
			if (i == list.size() - 1) {
				return arr;
			}
		}
		return null;
	}

	// 比較---不過用不到(刪了這個function也沒事)
	public boolean is_sure(List<Integer> list) {
		if (list.size() != arr.size())
			return false;
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i) != arr.get(i))
				return false;
		}
		return true;
	}

	// 遍歷輸出
	public void output(List<Integer> list) {
		System.out.println(Arrays.toString(list.toArray()));
	}
	
	//主函數
	public static void main(String[] args) {
		Kspx k = new Kspx();
		Integer aa[] = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 };
		arr = Arrays.asList(aa);
		List<Integer> list = k.core_sy(Arrays.asList(aa));
		k.output(list);
	}
}

輸出結果:

第0次操作i=0  j=9
[2, 3, 44, 38, 5, 47, 15, 36, 26, 27, 46, 4, 19, 50, 48]
第1次操作i=2  j=3
[2, 3, 38, 44, 5, 47, 15, 36, 26, 27, 46, 4, 19, 50, 48]
第2次操作i=2  j=4
[2, 3, 5, 38, 44, 47, 15, 36, 26, 27, 46, 4, 19, 50, 48]
第3次操作i=2  j=11
[2, 3, 4, 5, 38, 44, 47, 15, 36, 26, 27, 46, 19, 50, 48]
第4次操作i=4  j=7
[2, 3, 4, 5, 15, 38, 44, 47, 36, 26, 27, 46, 19, 50, 48]
第5次操作i=5  j=8
[2, 3, 4, 5, 15, 36, 38, 44, 47, 26, 27, 46, 19, 50, 48]
第6次操作i=5  j=9
[2, 3, 4, 5, 15, 26, 36, 38, 44, 47, 27, 46, 19, 50, 48]
第7次操作i=5  j=12
[2, 3, 4, 5, 15, 19, 26, 36, 38, 44, 47, 27, 46, 50, 48]
第8次操作i=7  j=11
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 47, 46, 50, 48]
第9次操作i=11  j=12
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 50, 48]
第10次操作i=13  j=14
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章