📜  使用C++ STL进行插入排序(1)

📅  最后修改于: 2023-12-03 15:22:18.228000             🧑  作者: Mango

使用C++ STL进行插入排序

插入排序是一种简单但高效的排序算法,它的时间复杂度为O(n²)。C++ STL(Standard Template Library)提供了很多现成的数据结构和算法,包括排序算法,我们可以使用它们来方便快捷地实现插入排序。

插入排序算法

插入排序是一种基本的排序算法,其原理是将无序序列的每一个元素插入到有序序列中的指定位置,从而使整个序列变为有序的。插入排序的具体实现方法可以采用直接插入排序和二分插入排序两种方式。

直接插入排序

直接插入排序的实现思路是:

  • 首先将序列的第一个元素视为有序序列,从第二个元素开始遍历。
  • 对于每一个元素,在有序序列中找到其正确位置并插入,使得序列仍然有序。
  • 重复步骤2,直到遍历完所有的元素。

下面是直接插入排序的实现代码:

void insertion_sort(int *arr, int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}
二分插入排序

二分插入排序是在直接插入排序的基础上进行优化,通过采用折半查找的方式,寻找元素的正确位置,使得比较次数减少,从而提高排序效率。二分插入排序和直接插入排序的代码实现基本相同,只是在查找元素的位置时采用了折半查找。

下面是二分插入排序的实现代码:

void binary_insertion_sort(int *arr, int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int left = 0;
        int right = i - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] > key) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        for (int j = i - 1; j >= left; j--) {
            arr[j + 1] = arr[j];
        }
        arr[left] = key;
    }
}
使用STL进行插入排序

除了手动实现插入排序算法,我们还可以使用C++ STL提供的sort()函数对数组进行排序。sort()函数是C++ STL库中提供的一个排序函数,可以对各种数据类型进行排序,包括数组、容器、迭代器等。

使用sort()函数进行插入排序的代码非常简单,只需要调用函数并传递数组的首地址和元素个数即可,如下所示:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int arr[] = {7, 1, 3, 8, 2, 9, 4, 6, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    sort(arr, arr + n);
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

以上代码会输出升序排序后的数组内容。

总结

本文介绍了插入排序算法的实现原理和使用STL进行排序的方法。通过本文的学习,我们可以学会如何使用STL对数组进行排序,同时也对插入排序算法和折半查找有了更加深刻的认识。