Sort 函式

極為常見

上個章節我們提過了氣泡排序法,但是氣泡排序法的效率並不高,因此在實際應用中很少使用。

使用 sort() 函式

接下來,我們要介紹一個更快速簡單的方法,就是使用 C++ 的 <algorithm> 標頭檔中內建的 sort() 函式!我們可以使用 sort() 函式來排序一個容器,且 sort() 函式的效率通常比氣泡排序法高。

這個函式的使用方法非常簡單,只要傳入兩個指標,分別指向排序的起點和終點,sort() 就會自動幫你排序好了!

sort(排序起點, 排序終點, 比較函式);

注意

排序範圍包含開頭但「不包含結尾」!

以下是一個簡單的範例:

// 排序一個 vector
vector<int> v = {5, 3, 6, 1, 2};

sort(v.begin(), v.end());

for (auto i : v) {
    cout << i << " ";
}

// 排序一個陣列
int arr[5] = {5, 3, 6, 1, 2};

sort(arr, arr + 5);

for (int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
}

這個程式碼會輸出:

1 2 3 5 6
1 2 3 5 6

是不是非常簡單呢!

排序部分範圍

如果我們只想排序陣列的一部分,也可以透過調整排序的起點和終點來達成:

vector<int> v = {5, 3, 6, 1, 2};

// 排序索引 1 到 3 的部分
sort(v.begin() + 1, v.begin() + 4);

for (auto i : v) {
    cout << i << " ";
}

int arr[5] = {5, 3, 6, 1, 2};

// 排序索引 1 到 3 的部分
sort(arr + 1, arr + 4);

for (int i = 0; i < 5; i++) {
    cout << arr[i] << " ";
}

這個程式碼會輸出:

5 1 3 6 2

這是因為我們只排序了陣列的索引 1 到 3 的部分。

小測驗

sort 函式可以只排序部分的陣列