STL排序算法

STL sort algorithm

本文关键字:算法 排序 STL      更新时间:2023-10-16

我正在尝试按升序对数字数组进行排序,但不知道我的代码出了什么问题(我对矢量完全陌生(。我应该首先将输入数组(数据(复制到STL向量中,然后将STL的排序算法应用到向量中,最后将向量复制回数组中。

void STLSort(int data[],int size)
{
vector<int> a1;
a1.reserve(size);
for(int i=0;i<size;i++)
    a1[i]=data[i];
sort(a1.begin(),a1.end());
for(int i=0;i<size;i++)
    data[i]=a1[i];
}

谢谢。

您可以直接对范围进行排序:

void sort_me(int * arr, unsigned int size)
{
  std::sort(arr, arr + size);
}
int main()
{
  int a[] = { 3, 11, 7 };
  sort_me(a, sizeof(a)/sizeof(int));
  // or even just in-place:
  int b[] = { 12, -1, 88, 0 };
  std::sort(b, b + sizeof(b)/sizeof(int));
}

更时髦:一个模板:

template <typename T, unsigned int N>
void sort_me_v2(T (&arr)[N])
{
  std::sort(arr, arr + N);
}
int main()
{
  int c[] = { -1, 2, -3, 4 };
  sort_me_v2(c);
}
a1.reserve(size);

这会为项目分配位置,但不会更改向量的size()。实际上,end()begin()相同,因此您正在对空的vector进行排序。你应该使用

a1.resize(size);