序言
英语:Insertion Sort)是一种简单直观的排序算法。 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
图解
将arr[i]与arr[x],x取值0<=x<i-1 ,进行比较,如果遇到比i小的或者到达0位,往x+1插入
插入排序code
void insert_sort(Element *arr, int len) {
int i;
for (i = 1; i < len; ++i) {
int temp = arr[i];
int j = i - 1;
for (; j >= 0; --j) {
if (temp < arr[j]) {
arr[j + 1] = arr[j]; //比temp大,往后移
} else {
break; //找到比自己小,此时小的索引为j.插入位置为j+1
}
}
arr[j + 1] = temp;
}
};
优化一下代码:
void insert_sort_plus(Element *arr, int len) {
int i;
for (i = 1; i < len; ++i) {
int temp = arr[i];
int j = i - 1;
for (; j >= 0 && temp < arr[j]; --j) {
arr[j + 1] = arr[j]; //往后移
}
arr[j + 1] = temp;
}
}
输入
void test_insert_sort(){
int len = 6;
Element arr[6] = {1, 2, 3, 7, 6, 5};
insert_sort(arr, len);
printArr(arr,len);
}
运行结果
1 2 3 5 6 7