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)); } } }