C 中的排序函數是用來對陣列或容器中的元素進行排序的功能函數。排序可以依升序或降序排列,可以對整型、浮點型、字元型等各種類型的資料進行排序。 C 語言提供了多個排序函數,本文將對這些排序函數的使用方法和特點進行詳細介紹。
sort() 函數是C STL 中最常用的排序函數之一,其功能是對陣列或容器中的元素進行排列。 sort() 函數的基本用法如下:
sort(begin, end);
其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址1,因此end 指向最後一個元素後面的空位址。 sort() 函數預設按升序排序,如果需要按降序排序,則可以傳入一個函數指標或 lambda 表達式作為第三個參數。
下面是一個範例程式碼,示範如何使用sort() 函數對整數陣列進行排序:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); sort(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }
執行上述程式碼結果如下:
1 2 3 4 5 6 7 8 9
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); stable_sort(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }執行上述程式碼結果如下:
1 2 3 4 5 6 7 8 9
partial_sort(begin, middle, end);其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址 1,而 middle 是指向第 k 個元素的迭代器。要注意的是,partial_sort() 函數只保證前 k 個元素是有順序的,其餘元素的順序是不確定的。以下是一個範例程式碼:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); int k = 3; partial_sort(arr, arr + k, arr + n); for (int i = 0; i < k; i++) { cout << arr[i] << " "; } return 0; }執行上述程式碼結果如下:
1 2 3
nth_element(begin, middle, end);其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址 1,而 middle 是指向第 k 個元素的迭代器。需要注意的是,nth_element() 函數只保證數組的前 k 個元素是有序的,而第 k 個元素則是未排序的。以下是一個範例程式碼:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); int k = 3; nth_element(arr, arr + k - 1, arr + n); cout << "第 " << k << " 小的数是:" << arr[k - 1] << endl; return 0; }執行上述程式碼結果如下:
第 3 小的数是:3
make_heap(begin, end);其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址 1。以下是一個範例程式碼:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }執行上述程式碼結果如下:
9 7 8 6 4 3 5 1 2
push_heap(begin, end);其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址。需要注意的是,被插入的新元素應放在堆的最後一個位置。下面是一個範例程式碼:
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); arr[n] = 0; push_heap(arr, arr + n + 1); for (int i = 0; i < n + 1; i++) { cout << arr[i] << " "; } return 0; }執行上述程式碼結果如下:
9 7 8 6 4 3 5 1 2 0
#pop_heap() 函數
pop_heap() 函數用於將堆頂元素彈出,並重新調整堆的結構,以滿足堆的性質。使用方法如下:###pop_heap(begin, end);###其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址。需要注意的是,彈出堆頂元素後,堆的大小應當減 1。以下是範例程式碼:###
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); pop_heap(arr, arr + n); n--; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }###執行上述程式碼結果如下:###
8 7 5 6 4 3 2 1######sort_heap() 函數#########sort_heap() 函數用於將堆排序,並且保證排序後的數組是升序的。使用方法如下:###
sort_heap(begin, end);###其中,begin 是陣列或容器中第一個元素的位址,end 是最後一個元素的位址。要注意的是,sort_heap() 函數在對堆排序前會先呼叫 pop_heap() 函數,彈出堆頂元素,因此排序後的陣列大小要減 1。以下是一個範例程式碼:###
#include <iostream> #include <algorithm> using namespace std; int main() { int arr[] = {5, 2, 9, 1, 4, 3, 8, 6, 7}; int n = sizeof(arr) / sizeof(arr[0]); make_heap(arr, arr + n); sort_heap(arr, arr + n); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; }###執行上述程式碼結果如下:###
1 2 3 4 5 6 7 8 9###總結######本文詳細介紹了C 中常見的排序函數,包括sort()、stable_sort ()、partial_sort()、nth_element()、make_heap()、push_heap()、pop_heap() 與sort_heap() 函式。這些排序函數各有特點,可以滿足不同的排序需求。在實際編程中,根據具體情況選擇適當的排序函數非常重要。 ###
以上是C++中的排序函數詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!