排序算法 -- 插入排序

wangxiaohua 2013-08-09

排序算法--插入排序

这个是我对插入排序的理解写的一个简单例子,可能和其他人的理解看法不同。
插入排序:

1,创建一个空的列表,用来保存排序后的列表,代号"有序列表"
2,从原列表中取出一个数,将其插入到"有序列表",并使"有序列表"保持有序状态
3,重复第2步直到原列表末尾

这种排序的平均时间复杂度是平方级的,效率不高,容易实现

/**
 * InsertionSort.java
 * 
 * @author   xieyan
 * @date     2013/06/20
 * @version  1.0
 */
package sort;

import java.util.ArrayList;
import java.util.List;

/**
 * InsertionSort.java
 */
public class InsertionSort {

	/*
	 * 插入排序: 1,创建一个空的列表,用来保存排序后的列表,代号"有序列表"
	 * 2,从原列表中取出一个数,将其插入到"有序列表",并使"有序列表"保持有序状态
	 * 3,重复第2步直到原列表末尾
	 * 
	 * 这种排序的平均时间复杂度是平方级的,效率不高,容易实现
	 */

	/**
	 * insertionSortAsc
	 * 
	 * <PRE>
	 * 升序
	 * </PRE>
	 * 
	 * @param arr
	 */
	public static List<Integer> insertionSortAsc(int[] arr) {
		if (arr == null) {
			return null;
		}

		List<Integer> result = new ArrayList<Integer>();
		for (int i = 0; i < arr.length; i++) {
			int obj = arr[i];
			if (i == 0) {
				result.add(obj);

			} else {
				for (int j = 0; j < result.size(); j++) {
					if (obj <= result.get(j)) {
						result.add(j, obj);
						break;
					}

					if (j == result.size() - 1) {
						result.add(obj);
						break;
					}
				}
			}
		}
		return result;
	}

	/**
	 * insertionSortAsc
	 * 
	 * <PRE>
	 * 降序
	 * </PRE>
	 * 
	 * @param arr
	 */
	public static List<Integer> insertionSortDesc(int[] arr) {
		if (arr == null) {
			return null;
		}

		List<Integer> result = new ArrayList<Integer>();
		for (int i = 0; i < arr.length; i++) {
			int obj = arr[i];
			if (i == 0) {
				result.add(obj);

			} else {
				for (int j = 0; j < result.size(); j++) {
					if (obj >= result.get(j)) {
						result.add(j, obj);
						break;
					}

					if (j == result.size() - 1) {
						result.add(obj);
						break;
					}
				}
			}
		}
		return result;
	}

	public static void main(String[] args) {
		int[] a = new int[] { 5, 7, 8, 3, 4, 2, 9, 1, 6 };

		List<Integer> b = insertionSortAsc(a);
		for (int i = 0; i < b.size(); i++) {
			System.out.println(b.get(i));
		}

		b = insertionSortDesc(a);
		for (int i = 0; i < b.size(); i++) {
			System.out.println(b.get(i));
		}
	}
}

相关推荐

yuanran0 / 0评论 2020-04-20
闫新宇 / 0评论 2015-02-06