簡體   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