插入排序

插入排序的过程是:对于一个无序数组,每个元素与前面元素比较,从后往前比较,如果比其中一个元素小,就把该元素插入比它小的元素前面。

插入排序是原址排序,原址排序指基本上不需要额外的辅助空间,允许少量额外的辅助变量进行的排序。就是在原来的排序数组中比较和交换的排序。

它是稳定排序

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;
    }   
}
原文地址:https://www.cnblogs.com/zuofaqi/p/9677330.html