C STL常用操作之sort篇

2021-10-17 08:03:35 字數 3166 閱讀 3377

#include

sort排序是和堆排序等一樣的較快的排序方式,時間複雜度為o(n*logn)。

類似於快速排序

vector:

#include

#include

#include

using namespace std;

vector<

int> v1;

int a;

intmain()

cout <<

"原始:"

;for

(int i =

0; i <5;

++i)

cout << v1[i]

<<

" ";

//輸出原始的情況

cout << endl;

sort

(v1.

begin()

, v1.

end())

; cout <<

"排序後:"

;for

(int i =

0; i <5;

++i)

cout << v1[i]

<<

" ";

//輸出使用sort排序好之後的情況

我們看到,在使用sort之後,確實將v1排好序了。

那麼sort函式是用什麼作為引數的呢?

sort函式一共有三個引數,第乙個是排序序列的起始位置;第二個是最後乙個位置的後乙個位置;第三個是排序規則,且第三個引數預設為公升序規則。所以我們上述用v1的begin和end作為第一二個引數,省略了第三個引數,排好序後v1內部是公升序的。

普通陣列:

注意這裡我們是對陣列x從下標1到5排序,但是我們在sort的第二個引數是加的6。

如果我們加5得到的結果如下:

我們發現sort只是對前四個數進行了排序,這就是我們前面提到的,第二個引數,必須是需要排序序列結束位置的後乙個位置(多加上1)。

#include

#include

#include

using namespace std;

vector<

int> v1;

int a;

intmain()

cout <<

"原始:"

;for

(int i =

0; i <5;

++i)

cout << v1[i]

<<

" ";

//輸出原始的情況

cout << endl;

sort

(v1.

begin()

, v1.

end(

),less<

int>()

);//less從小到大

cout <<

"從小到大:"

;for

(int i =

0; i <5;

++i)

cout << v1[i]

<<

" ";

//輸出使用sort排序好之後的情況

cout << endl;

sort

(v1.

begin()

, v1.

end(

), greater<

int>()

);//greater從大到小

cout <<

"從大到小:"

;for

(int i =

0; i <5;

++i)

cout << v1[i]

<<

" ";

//輸出使用sort排序好之後的情況

less為從小到大,greater為從大到小。因為預設為從小到大,所以一般省略掉了第三個引數。

#include

#include

#include

using namespace std;

struct node

;vector v;

node a;

bool cmp

(node a, node b)

//cmp將排序規則定為按照data1降序,若data1相等按data2降序

intmain()

sort

(v.begin()

, v.

end(

), cmp)

;//按照cmp規則進行排序

cout <<

"結果:"

<< endl;

for(

int i =

0; i <4;

++i)

cout << v[i]

.data1 <<

" "<< v[i]

.data2 << endl;

//輸出排好序的v1

這裡我們用cmp函式將排序規則定為:按照data1降序,data1相等的情況下,按照data2降序。

並且將cmp作為sort的第三個引數,就可以了。

發現問題歡迎指正!

C STL常用操作之vector篇

include 它是一種容器,可以理解為向量 陣列 可以動態申請增加長度的陣列。vector int v1 預設陣列長度為0 vector int v2 4 申請了長度為4的陣列v2 vector int v3 4,5 申請了長度為4的陣列,並且每個位置都賦值為5用at或者類似於陣列 vector ...

C STL常用操作之string篇

include 一種資料型別,類似於字串,但是可以進行一些比字串更方便的操作,在程式設計的時候也是經常用到。string s1 預設為空串 string s2 4 c 長度為4且每個位置的字元均為c cout s1 endl s2 endl getline cin,s1 讀取一整行 cin s2 讀...

C STL常用操作之stack篇

棧也是一種常用的資料結構,其特點是last in first out 後進先出 棧對於某些問題的處理是非常方便的,比如字尾表示式求值 中綴表示式轉化為字尾表示式。逆序輸出未知長度的字串 十進位制轉二進位制。等等 一般使用空腔構造 ss.push 2 將整形資料2壓入到棧ss中 ss.push 5 將...