1. 程式人生 > >C++標準庫中排序函式sort的用法

C++標準庫中排序函式sort的用法

(一)為什麼要用c++標準庫裡的排序函式

Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高!

(二)c++標準庫裡的排序函式的使用方法

ISort函式包含在標頭檔案為#include<algorithm>的c++標準庫中,呼叫標準庫裡的排序方法可以不必知道其內部是如何實現的,只要出現我們想要的結果即可!

IISort函式有三個引數:

(1)第一個是要排序的陣列的起始地址。

(2)第二個是結束的地址(最後一位要排序的地址)

(3)第三個引數是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個引數,此時預設的排序方法是從小到大排序。

Sort函式使用模板:

Sort(start,end,排序方法)

下面就具體使用sort()函式結合對數組裡的十個數進行排序做一個說明!

例一:sort函式沒有第三個引數,實現的是從小到大

#include<iostream>

#include<algorithm>

using namespace std;

int main()

{

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

 for(int i=0;i<10;i++)

 cout<<a[i]<<endl;

sort(a,a+10);

 for(int i=0;i<10;i++)

 cout<<a[i]<<endl;

 return 0;

}

例二

通過上面的例子,會產生疑問:要實現從大到小的排序腫麼辦?

 這就如前文所說需要在sort()函式裡的第三個引數裡做文章了,告訴程式我要從大到小排序!

需要加入一個比較函式 complare(),此函式的實現過程是這樣的

bool complare(int a,int b)

{

 return a>b;

}

這就是告訴程式要實現從大到小的排序的方法!

#include<iostream>

#include<algorithm>

using namespace std;

bool complare(int a,int b)

{

 return a>b;

}

int main()

{

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

 for(int i=0;i<10;i++)

 cout<<a[i]<<endl;

 sort(a,a+10,complare);//在這裡就不需要對complare函式傳入引數了,//這是規則

 for(int i=0;i<10;i++)

 cout<<a[i]<<endl;

 return 0;

}

例三:

通過上面例一、二的方法雖然實現了從大到小和從大到小的排序,這樣做還是有點麻煩,因為還需要自己編寫告訴程式執行何種排序的原則的函式,c++標準庫強大的功能完全可以解決這種麻煩。

Sortt函式的第三個引數可以用這樣的語句告訴程式你所採用的排序原則

less<資料型別>()//從小到大排序

greater<資料型別>()//從大到小排序

結合本例子,這樣的就可以完成你想要的任何一種排序原則了

相關推薦

C++標準排序函式sort用法

(一)為什麼要用c++標準庫裡的排序函式 Sort()函式是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的氣泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間複雜度為n*log2(n),執行效率較高! (二)c++標準庫裡的排序函式的使用方法 I)S

C標準的快速排序(quick-sort函式 [簡單應用]

#include <iostream> #include <cstdlib> using namespace std; const size_t INDEX_ZERO = 0; int com(const void *a,const void *

C語言標準round函式

本文轉自---http://demon.tw/programming/c-round.html C語言標準庫中有沒有round函式?答案是,可能有,也可能沒有。這取決於你使用的編譯器,更準確地說,是編輯器是否支援C99標準。 讓我們簡單回顧一下C語言標準的歷史:C的第一個標

MATLAB排序函式sort()的用法

MATLAB中排序函式sort()可以對引數的元素進行升序排序或降序排序。 具體的用法如下: Y=sort(X) sort()的引數可以是向量,矩陣,陣列等等。當X是向量時,sort(X)對X的元素進行升序排序;當X是矩陣時,sort(X)對X的每一列進行升序排序;

C語言排序函式用法

C語言中沒有預置的sort函式。如果在C語言中,遇到有呼叫sort函式,就是自定義的一個函式,功能一般用於排序。 一、可以編寫自己的sort函式。 如下函式為將整型陣列從小到大排序。 void sort(int *a, int l)//a為陣列地址,l為陣列長度

STL:algorithm排序函式sort(升序排列函式)和reverse(反轉排列函式)的簡單用法

#include "stdafx.h" #include <iostream> #include <algorithm> using namespace std; int

C++標準棧和隊列的一些基本操作

AS PE 元素 返回值 nbsp 返回 void 入隊 style 棧:   <1>使用棧,要包含頭文件:#include <stack>   <2>定義棧,stack<Type> s; 其中Type為數據類型,可以是基本數

SQL排序函式用法

SQL中的排序函式有三:1、row_number() over();2、rank() over();3、dense_rank() over(),具體用法如下: 1.row_number() over(partition by 列名 order by 列名 [desc]) 其中,partition by 是分組

模擬實現C++標準的auto_ptr

一、引言 C++標準庫中有一個auto_ptr可供我們參考。這是一個用來包裝原生指標(native pointer)的物件,聲名狼藉的記憶體漏洞(memory leak)問題可籍此獲得解決。根源在於

Python排序函式sort()和sorted()的有什麼區別呢?

注:本文為轉載,如有侵權請告知,將予以刪除 原文:https://blog.csdn.net/sinat_35512245/article/details/79584196      今天在LeetCode上刷題的時候要用到排序函式,剛開始並沒有意識到這

C++ 標準的執行緒安全

執行緒安全規則應用到標準 C++ 庫中的所有類,這也包括 shared_ptr,如下所述。 有時提供更強的保證(例如,如下所述的標準 iostream 物件和專門用於多執行緒的型別,如 中的型別)。 從多個執行緒讀取某個物件時,該物件是執行緒安全的。 例

C標準——字串處理函式string.h和wchar.h

string.h中包含了所有的字串處理函式,也包含了記憶體處理函式,因為這些記憶體處理函式(如比如、複製、搜尋)的功能與字串處理函式功能類似。我們是用通用指標來指向記憶體塊的,通用指標可以用char*型別(傳統C語言),也可以用void*型別(標準C語言)。每個函式都

C++標準的堆-heap

前言 本文介紹如何使用STL裡的heap(堆)演算法。第一次接觸heap這種資料結構是在大學的資料結構教材上,它是一棵完全二叉樹。在STL中,heap是演算法的形式提供給我們使用的。包括下面幾個函式: make_heap: 根據指定的迭代器區間以及一個可選的比較函式,

C++:C++標準的關聯式容器Map

Map每個元素都是 key/value pair ,其中key是排序準則的基準。每個key只能出現一次,不允許重複。Map 也可被視為一種關聯式陣列,也就是“索引可為任意型別”的陣列。 以具體的兩個例子解釋什麼是map 例項一 #include "pch.h" #include

C++標準bitset型別

雖然在C++的基本型別中,似乎沒有二進位制這個重要的型別,但是在C++標準庫中卻提供了能夠處理二進位制位的有序集合型別,這就是bitset型別,使用該型別時需要先包含該標頭檔案並進行宣告: #include <bitset> using namespace st

C++標準的list的實現原理

在C++中採用了大量的標誌模板庫(STL)實現程式的設計,這種設計方式使得不同型別的物件都能通用,而不再是C語言中的通常對於不同的型別需要重新設計或者或者比較採用間接的指標操作。C++中的這種方式簡化了寫程式碼的複雜度,但是增加了編譯器的複雜度和難度。 在資料結構中連結串

c++標準裏的sort()排序函數

C++ STL Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間復雜度為n*log2(n),執行效率較高!一,sort()排序函數的使用方法I)Sort函數包含在頭文件為#in

C++標準 std::sort vector排序

前天要做一個對C++ STL的vector容器做一個排序操作,之前一直把vector當做一個容量可自動變化的陣列,是的,陣列,所以打算按照對陣列進行排序的方法:用快速排序或是氣泡排序等演算法自己寫一個排序的函式。後來覺得STL這麼強大,應該有它自己的排序方法(沒有好好學習

使用C++標準sort自定義比較函式導致死迴圈問題

永遠讓比較函式對相等的值返回false(來自Effective C++) -------------------------------------------------------------------------------------------------

C++拾取——使用stl標準實現排序演算法及評測

        今天看了一篇文章,講各種語言的優勢和劣勢。其中一個觀點:haskell非常適合寫演算法,因為使用者不用去關心具體的計算機實現,而只要關注於操作語義。這讓它在專心研究演算法的人中非常受歡迎。所以很多時候,語言的爭論沒有太多的意義,有意義的是它