package cn.xf.algorithm.ch03; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 数据排序 * * @author xiaof * */ public class Sort { /** * 对给定的数组进行排序 选择排序法 每次选择在当前序列之后的最小值,和当前序列数据进行对换 * * @param inputData * @return */ public static List<Long> selectionSort(List inputData) { // 遍历数据,设定一个最小值 int n = inputData.size(); // 队列长度 int minIndex = 0; Long min = 0l; // 最后一个数据不用排列 for (int i = 0; i < n - 1; ++i) { // 初始化最小数据的索引位置 minIndex = i; min = (Long) inputData.get(minIndex); // 遍历后面数据,比较最小值 for (int j = i + 1; j < n; ++j) { // 判断大小 Long tempJ = (Long) inputData.get(j); if (tempJ < min) { min = tempJ; // minIndex = j; // 交换数据 Sort.swap(inputData, minIndex, j); } } } // 排序结束之后返回数据 return inputData; } /** * 交换数组中的i和j的数据 * * @param resourceData * @param i * @param j */ public static void swap(List resourceData, int i, int j) { Object tempO = resourceData.get(i); resourceData.set(i, resourceData.get(j)); resourceData.set(j, tempO); } /** * 冒泡排序 * * @param inputData * @return */ public static List<Long> bubbleSort(List inputData) { // 冒泡排序,就是用当前的元素和后面数据进行比较,一层一层冒泡排序 int n = inputData.size(); for (int i = 0; i < n; ++i) { // 遍历第二层,进行交换比较,一轮循环,都是选出最后一个元素 // 然后下一次循环比较的数据就会比原来少1,也就是循环n-i-1次循环 for (int j = 0; j < n - i - 1; ++j) { Long tempJ = (Long) inputData.get(j); // 获取要比较的下一个数据 Long tempJ1 = (Long) inputData.get(j + 1); // 从小到大排序,当前比后面大,就交换数据 if (tempJ > tempJ1) { Sort.swap(inputData, j, j + 1); } } } return inputData; } public static void main(String[] args) { List<Long> data = Arrays.asList(89l, 45l, 68l, 90l, 29l, 34l, 17l); // List<Long> resultData = selectionSort(data); List<Long> resultData = bubbleSort(data); for (Long data1 : resultData) { System.out.print(data1 + " "); } } }