Java快速选择排序简易版(原创)

13 篇文章 0 订阅
8 篇文章 0 订阅
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]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值