首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

排序算法 - 插入排序

2013-08-10 
排序算法 -- 插入排序排序算法--插入排序这个是我对插入排序的理解写的一个简单例子,可能和其他人的理解看

排序算法 -- 插入排序

排序算法--插入排序

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

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

?

?

热点排行