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