对向量元素进行排序[关闭]

Posted

技术标签:

【中文标题】对向量元素进行排序[关闭]【英文标题】:Sorting Vector elements [closed] 【发布时间】:2014-08-25 22:36:33 【问题描述】:

如何使用 sort() 函数从第 i 个索引到第 j 个索引对向量元素进行排序。假设我有一个向量,它的元素是 3,1,2,4,5,7,6,10,9 .我想从第 i 个索引排序到第 j 个索引。我已经这样做了:

#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main()

    vector<int>vc;
    vc.push_back(10);
    vc.push_back(9);
    vc.push_back(8);
    vc.push_back(7);
    vc.push_back(6);
    vc.push_back(5);
    vc.push_back(4);
    vc.push_back(3);
    vc.push_back(2);
    sort(vc.begin()+2,vc.begin()+6);
    for(int i=0;i<9;i++)
    cout<<vc[i]<<" ";

但这不是排序。我只想对中间元素进行排序。我该怎么做?

【问题讨论】:

不工作”是什么意思?出了什么问题? 不要通过随机猜测来编程。学习。思考。知道。 &lt;bits/stdc++.h&gt; 对您来说不是有效的标头。 #include&lt;bits/stdc++.h&gt; 是怎么回事? 您正在对元素进行排序 4,5,7 并且它们已经排序。 @user3700648:您发布的代码完全按照您的要求执行。 Live demo on ideone.com 【参考方案1】:

也许你对endsort 的参数感到困惑。它不是序列的最后一个元素,它是过去最后一个元素。因此,您尝试对已排序的元素 3、4 和 5 进行排序 - 您不会看到任何变化。

【讨论】:

如果我想使用排序功能对元素 4,5 和 6 进行排序,我必须做什么? @user3700648:你需要更清楚。您要对值 4,5,6 或向量索引 4 到 6 进行排序吗? 我想对向量索引 4 到 6 进行排序 @user3700648:标准库算法采用first 元素和one past the last 元素的半开 迭代器范围。包含索引[4, 6] 的范围实际上是[4, 7),因此您需要使用begin()+4begin()+7【参考方案2】:

一个简单的冒泡排序实现。您可以用来排序而不是使用 标准::排序。虽然这比较慢,但这个算法是O(n^2)

注意:这并没有错误检查这是假设完美输入

 void sortMid(vector<int> &vec, int s, int e)

    int temp;
    for(int i = s; i < e; i++)
      for(int j = s; j<e; j++)
        if(vec[s+1] > vec[j])
           temp = vec[j];
           vec[j]=vec[j+1];
           vec[j+1] = temp;
        
      
    
  

【讨论】:

是不是可以用排序功能来完成? @user3700648 正如其他人所说,您的问题是您尝试排序的元素已经排序。将您的代码更改为std::sort(vc.begin() + 2, vc.begin() + 7)

以上是关于对向量元素进行排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中使用向量对数字进行排序[关闭]

向量排序算法,只对大于 0 的元素进行排序

如何在 C++ 中对向量组元素进行排序?

按最后一个元素对向量进行排序

对已经排序了 n 个第一个元素的向量进行排序?

使用整数向量的向量对整数向量进行基数排序