首頁 > 後端開發 > C++ > 主體

C++中的排序函數詳解

WBOY
發布: 2023-11-18 15:51:15
原創
1264 人瀏覽過

C++中的排序函數詳解

C 中的排序函數是用來對陣列或容器中的元素進行排序的功能函數。排序可以依升序或降序排列,可以對整型、浮點型、字元型等各種類型的資料進行排序。 C 語言提供了多個排序函數,本文將對這些排序函數的使用方法和特點進行詳細介紹。

  1. sort()函數

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
登入後複製
登入後複製
登入後複製

  1. stable_sort() 函數

stable_sort() 函數與sort() 函數相似,但它保證在排序後,相同值的元素的相對位置不變。 stable_sort() 函數的使用方法與 sort() 函數類似,也可以傳入一個函數指標或 lambda 表達式作為第三個參數。下面是一個範例程式碼:

#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() 函數
partial_sort() 函數可以將陣列或容器中的元素部分排序,即將前k 小的元素排在陣列前面(或將前k 大的元素排在陣列前面)。使用方法如下:

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() 函數
nth_element() 函數用於選取數組或容器中的第k 小(或第k 大)元素,並將其排在陣列的第k 個位置。使用方法如下:

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() 函數
make_heap() 函數可以將陣列或容器轉換為堆,即將數組中的元素按照二元堆的規則進行排序,以支援堆操作。使用方法如下:

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() 函數
push_heap() 函數可以將一個新元素插入到堆中,並重新調整堆的結構,以滿足堆的性質。使用方法如下:

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板