插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place
排序(即只需用到O(1)O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素腾出空间。
// 功能:实现对int数组按升序排序
// 参数:
// data: int数组
// n: 数组元素的个数
// 返回值:
// 无
//
void InsertionSort(int data[], int n) {
for (int i = 1; i < n; i++) { // 假定第一个元素为已排序序列,所以下标从1开始
int temp = data[i];
int j = i; // j表示腾出的位置
// 因为依次和前一个元素比较,所以是j > 0,而不是j >= 0。
// 从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素腾出位置
for (; j > 0; j--) {
if (data[j - 1] > temp) {
data[j] = data[j - 1];
}
else {
break;
}
}
if(j != i)
data[j] = temp;
}
}