首页 > 解决方案 > 如何使用插入排序对向量进行排序?

问题描述

我只是在练习使用向量实现选择排序。但它返回的向量与我作为输入给出的向量相同。

此实现适用于数组但不适用于向量。

#include<bits/stdc++.h>
using namespace std;
vector<int>  insertionSort(vector<int> v, int n)
{
    for(int i=1;i<=n-1;i++)
    {
        int currentEle = v[i];
        int prevEle = i-1;
        // right index where current is inserted
        while(prevEle>=0 and v[prevEle]>currentEle){
            v[prevEle+ 1] = v[prevEle];
            prevEle = prevEle-1;

        }
       v[prevEle+1] = currentEle;
    }
      return v;
    
}
int main()
{
    int n;
    cin>>n;
    vector<int> v(n);
    for(int i=0;i<n;i++)
    {
        cin>>v[i];
    }
    insertionSort(v,n);
    for(auto x: v)
    {
        cout<<x<<" ";
        
    }

  //OUTPUTS
    
    Input : 5 3 1 2 4
    Expected Output : 1 2 3 4 5
    My Output : 5 3 1 2 4 

有没有使用相同算法使用选择排序对向量进行排序的特定方法?

标签: c++vectorc++17

解决方案


您没有将返回的向量存储insertionSort到任何东西中。

你可以做:

std::vector<int> result = insertionSort(v,n);

代替:

insertionSort(v,n);

然后打印result而不是v

for (auto &x : result) {
  std::cout << x << " ";
}

其他一些与问题无关但有帮助的观点。

  1. 使用using namespace std被认为是一种不好的做法
  2. 为什么你不应该使用#include<bits/stdc++.h>

推荐阅读