首页 > 代码库 > 【算法设计与分析基础】5、冒泡排序与选择排序

【算法设计与分析基础】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 = http://www.mamicode.com/Arrays.asList(89l, 45l, 68l, 90l, 29l, 34l, 17l);"\t");
		}
	}

}

  

【算法设计与分析基础】5、冒泡排序与选择排序