插入排序

/** * 插入排序 * @tparam T * @param arr 待排序的数组 * @param n 数组大小 */
template<typename T>
void insertionSort(T arr[], int n) {
    //i从1开始 默认arr[0]已经有序
    for (int i = 1; i < n; i++) {
        //j从后向前遍历 寻找比当前大的元素
        for (int j = i; j > 0; j--) {
            if (arr[j] < arr[j - 1])
                swap(arr[j], arr[j - 1]);
            else
                break;
        }
    }
}

改进的插入排序

/** * 改进插入排序 * @tparam T * @param arr 待排序的数组 * @param n 数组大小 */
template<typename T>
void insertionSort(T arr[], int n) {
    //i从1开始 默认arr[0]已经有序
    for (int i = 1; i < n; i++) {
        //j从后向前遍历 寻找比当前大的元素
        T e = arr[i];
        int j;//j保存元素e应该插入的位置
        for (j = i; j > 0 && arr[j - 1] > e; j--) {
            arr[j] = arr[j - 1];
        }
        arr[j] = e;
    }
}