排序算法的基本概念
排序的定义
排序的稳定性
内排序与外排序
内排序是整个排序过程中,待排序的所有记录全部放置在内存中。
外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要内外存之间多次数据交换才能进行。
直接插入排序
直接插入排序的基本思路是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。其排序过程可以参考下图。
实现代码
算法示例程序采用java实现。
public class InsertSort {
/**
* 直接插入排序
* @param array
*/
public static void insertSort(int[] array) {
for (int i = 1; i < array.length; ++i) {
int record = array[i]; //暂存第i个记录
int j = 0;
//找到第i个元素待插入的位置
for (j = i; j > 0 && array[j - 1] > record; --j) {
array[j] = array[j - 1];
}
//插入元素
array[j] = record;
}
}
public static void main(String[] args) {
int[] array = {10, 50, 7, 56, 23, 89, 1};
insertSort(array);
for (int i =0 ; i < array.length; ++i) {
System.out.print(array[i] + "\t");
}
}
}
复杂度分析
直接插入排序在空间上仅需一个记录的辅助空间。
参考资料
大话数据结构