如何对作为参数传递的数组进行排序?

时间:2014-04-13 05:12:14

标签: c++ arrays sorting pointers

我必须在已经编写的代码中编写一个方法,直接传递给我一个数组。但是,一旦在我的方法中,该数组已成为指向数组中第一个对象的指针。所以现在我做了一些计算,想要对数组进行排序。但由于它现在不被认为是一个数组,我无法执行sort()函数。

当我只有指针可以使用时,对数组进行排序的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

您需要知道数组中的元素数量,作为单独的参数传递,或者指向一个超过最后一个元素的指针。

void my_sort(int* p, unsigned n) {
    std::sort(p, p+n);
}

void my_sort2(int* p, int* p_end) {
    std::sort(p, p_end);
}

你会打电话给他们

int a[] = { 3, 1, 2 };
my_sort(a, sizeof a / sizeof a[0]); // or 3...
my_sort2(a, &a[2] + 1); // one past the last element! i.e. a+3

答案 1 :(得分:0)

在c中,“数组”和“指向数组中第一个对象的指针”之间基本没有区别。使用基指针引用数组,即指向第一个对象的指针。 Array base pointer and its address are same. Why?处技术上精确的解释 因此,只需像在其他任何地方那样对数组进行排序。得到一个示例排序或示例代码或足够吗?

答案 2 :(得分:0)

如果您可以从C ++ 11开始使用std::array,那将是最好的:

http://en.cppreference.com/w/cpp/container/array

通过这种方式,您还可以获得相应size method已知且可访问的大小。您还可以考虑其他std容器类型而不是原始数组。通常,最好尽可能避免使用原始数组。

如果不这样做,你需要通过函数参数或类别成员变量等其他方法知道数组的大小,如果它发生在类中,依此类推。

然后,您可以根据您的复杂性需求使用不同类型的排序算法;让它快速排序,冒泡排序,堆排序,稳定排序等等......这取决于数据代表什么类型的数据等。

一种排序算法是使用std::sort。因此,你会写这样的东西:

std::sort (mystdarray.begin(), mystdarray.end()); 

std::sort (myrawarray, myrawarray+size); 

答案 3 :(得分:0)

在传入之前对其排序方式进行排序。如果sort()函数需要长度,则将长度作为附加参数传递。