【C++】使用STL內建的sort()函式做到排序功能!

排序這門課是所有學程式的人都必修的東西,因為很多資料的處理都需要用到他,很多程式語言也都把排序的函式放到程式語言的內部,讓開發者可以很方便的使用,但我想應該很少人知道,其實C++也有內建排序函式吧!

C++內建的排序函式存放在「algorithm」這個標頭檔裡面,他是屬於標準的一部分,所以可以跨平台使用~ 另外這個函式是沒有回傳值的,他會直接把你傳入的資料排序好,然後就放在原本的變數裡面

使用前請先載入algorithm這個標頭檔

sort函式格式:

sort(array_begin,array_end);

array_begin的部份就是開始排序的地方,array_end就是排序的結尾,這樣解釋很難理解吧~ 舉例來講,現在你要把整個陣列做排序,陣列長度是8

int x[8]={1,3,5,2,4,6,9,0};

上面是宣告x這個陣列,再來:

sort(x,x+8);

上面是一個比較簡易的排序寫法,意思就是從x陣列的第一個位置到最後一個位置去進行排序,這時候x陣列內容={0,1,2,3,4,5,6,9}

那如果只想針對x陣列的前四項進行排序呢?

sort(x,x+4);

排序前:x={1,3,5,2,4,6,9,0},排序後:x={1,2,3,5,4,6,9,0}

請注意這次排序只有1~4項有做排序,後面5~8項是沒有變動的

另外sort()預設都是升冪排序,如果要做成降冪呢? 其實這也很簡單,透過reverse把陣列反轉就可以了

reverse的格式跟sort很類似,他也是沒有回傳值的

reverse格式:

reverse(array_begin,array_end);

參數部分不做解釋了,直接進入範例:

int x[8]={1,3,5,2,4,6,9,0};
sort(x,x+8);

此時x={0,1,2,3,4,5,6,9},這是升冪,再來透過reverse把它變成降冪:

reverse(x,x+8);

這時候x={9,6,5,4,3,2,1,0}

另外上面的寫法都是直接用x,x+8來指定起始值、終止值,但是實際寫程式時你無法確定陣列的長度,這時候要怎麼辦呢?上面因為要寫的比較易懂,所以寫法不是很正確,下面這才是真正好的寫法哦~~

正確寫法提示:透過sizeof計算陣列長度

範例:

int x[8]={1,3,5,2,4,6,9,0};
int x_end=sizeof(x)/sizeof(int);
sort(x,x+x_end);

上面的寫法利用sizeof取得陣列長度,這招很常見,一定要學起來! sizeof()這個函式可以取得變數佔用的記憶體量,把取得的值/變數型別就可以得到陣列長度了~

完整範例程式碼:

完整範例下載:Box.net4SharedGoogleDropbox

 

在〈【C++】使用STL內建的sort()函式做到排序功能!〉中有 1 則留言

  1. 可以不用reverse
    int x[8] = { 1, 3, 5, 2, 4, 6, 9, 0 };
    sort(x, x + 8, greater());

    sort(x, x + 8, [](int a, int b) { return a > b; });

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料