【演算法設計與分析基礎】5、冒泡排序與選擇排序,演算法設計與分析冒泡
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");}}}