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

📅  最后修改于: 2021-04-29 07:19:05             🧑  作者: Mango

使用STL函数实现插入排序。

先决条件:插入排序,std :: rotate,std :: upper_bound,C++迭代器。

想法是使用std :: upper_bound查找使数组未排序的元素。然后,我们可以旋转未排序的部分,以便最终对其进行排序。我们可以遍历数组进行这些操作,结果将是一个排序后的数组。

该代码是脱机使用的,目的是显示硬编码和易于理解的代码。

// C++ program to implement insertion sort using STL.
#include 
  
// Function to sort the array
void insertionSort(std::vector &vec)
{
    for (auto it = vec.begin(); it != vec.end(); it++)
    {        
        // Searching the upper bound, i.e., first 
        // element greater than *it from beginning
        auto const insertion_point = 
                std::upper_bound(vec.begin(), it, *it);
          
        // Shifting the unsorted part
        std::rotate(insertion_point, it, it+1);        
    }
}
  
// Function to print the array
void print(std::vector vec)
{
    for( int x : vec)
        std::cout << x << " ";
    std::cout << '\n';
}
  
// Driver code
int main()
{
    std::vector arr = {2, 1, 5, 3, 7, 5, 4, 6};    
    insertionSort(arr);    
    print(arr);
}

输出:

1 2 3 4 5 5 6 7