繁体   English   中英

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

[英]How can I sort an array passed as a parameter?

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

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

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

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

在c语言中,“数组”和“指向数组中第一个对象的指针”之间基本上没有区别。 数组使用其基指针 (即指向第一个对象的指针)进行引用。 数组基指针及其地址的技术精确解释相同。 为什么? 因此,只需像对其他任何地方一样对数组进行排序即可。 想得到示例排序或示例代码还是足够?

最好的办法是,如果您可以从C ++ 11开始在以下位置使用std::array

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

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

否则,您将需要通过函数参数或其他方法(例如类成员变量,如果它发生在类内部)来了解数组的大小,等等。

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

一种排序算法是使用std :: sort 因此,您将编写如下内容:

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

要么

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

完全按照传递之前对其进行排序的方式对它进行排序。如果sort()函数需要一个长度,则将长度作为附加参数传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM