*****插入排序的主要思想是:*****每趟排序将一个待排序的记录按其关键码的大小插入到已经排好序的有序序列中,直到全部记录排好序。
*****插入排序算法的实现思路是:*****初始状态下,将待排序序列中的第一个元素看作是有序的子序列。从第二个元素开始,在不破坏子序列有序的前提下,将后续的每个元素插入到子序列中的适当位置。
用插入排序算法对 {14, 33, 27, 10, 35, 19, 42, 44} 实现升序排序:
#include <stdio.h>
#define MAX 8 //设定待排序序列中的元素个数
//list[MAX]为待排序序列
void insertion_sort(int list[MAX]) {
int insert_elem;
int site;
int i;
//从第 2 个元素(下标为 1)开始遍历
for (i = 1; i < MAX; i++) {
// 记录要插入的目标元素
insert_elem = list[i];
// 记录目标元素所在的位置,从此位置向前开始遍历
site = i;
// 从 site向前遍历,找到目标元素的插入位置
while (site > 0 && list[site - 1] > insert_elem) {
//site 处的元素向后移动一个位置
list[site] = list[site - 1];
site--;
}
//将目标元素插入到指定的位置
if (site != i) {
list[site] = insert_elem;
}
}
}
int main() {
int i;
int list[MAX] = { 14, 33, 27, 10, 35, 19, 42, 44 };
insertion_sort(list);
//输出 list 数组中已排好序的序列
for (i = 0; i < MAX; i++) {
printf("%d ", list[i]);
}
}
http://c.biancheng.net/algorithm/insertion-sort.html