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 + "\t");
}
}
}