插入排序的过程是:对于一个无序数组,每个元素与前面元素比较,从后往前比较,如果比其中一个元素小,就把该元素插入比它小的元素前面。
插入排序是原址排序,原址排序指基本上不需要额外的辅助空间,允许少量额外的辅助变量进行的排序。就是在原来的排序数组中比较和交换的排序。
它是稳定排序
void insertion_sort(int* arr, int arrlen)
{
// i 表示当前要找到位置的元素下标。i之前的元素已经是有序的了
// arr[i...arrlen]元素还是无序的
// 这个排序中,只使用了一个临时变量 tmp, arr[0...j-1]只是在原来的位置上做交换
for (int i = 1; i < arrlen; i++)
{
int tmp = arr[i];
int j = i - 1;
while (arr[j] > tmp && j >= 0)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = tmp;
}
}