我必须在已经编写的代码中编写一个方法,直接传递给我一个数组。但是,一旦在我的方法中,该数组已成为指向数组中第一个对象的指针。所以现在我做了一些计算,想要对数组进行排序。但由于它现在不被认为是一个数组,我无法执行sort()函数。
当我只有指针可以使用时,对数组进行排序的最佳方法是什么?
答案 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()
函数需要长度,则将长度作为附加参数传递。