sort()函式

taohuaxiaochunfeng發表於2024-04-08

1、語法

Sort(start,end,cmp)

要使用sort(),需要包含標頭檔案。

#include <algorithm>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);1)start表示要排序陣列的起始地址;迭代器的起始位置,對於陣列來說就是陣列的首地址,一般寫上陣列名就可以,因為陣列名是一個指標常量。
(2)end表示陣列結束地址的下一位;迭代器的結束位置,即首地址加上陣列的長度n(代表尾地址的下一地址)。
(3cmp用於規定排序的方法,可不填,預設升序。迭代器的結束位置,即首地址加上陣列的長度n(代表尾地址的下一地址)。

2、函式示例

示例一:

sort函式沒有第三個引數,實現的是從小到大(升序)排列:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     int a[10]={9,6,3,8,5,2,7,4,1,0};
 7     for(int i=0;i<10;i++)
 8     cout<<a[i]<<endl;
 9     sort(a,a+10);//指標
10     for(int i=0;i<10;i++)
11     cout<<a[i]<<endl;
12     return 0;
13 }

示例二:

這就如前文所說需要在sort()函式里的第三個引數了,告訴程式要從大到小排序。需要加入一個比較函式compare(),此函式的實現過程如下:
bool compare(int a,int b)
{
    return a>b;
}

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

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 bool compare(int a,int b)
 5 {   
 6 return a>b;
 7 }
 8 int main()
 9 {
10 int a[10]={9,6,3,8,5,2,7,4,1,0};
11 for(int i=0;i<10;i++)
12 cout<<a[i]<<endl;  
13 sort(a,a+10,compare);//在這裡就不需要對compare函式傳入引數了   
14 for(int i=0;i<10;i++)
15 cout<<a[i]<<endl;
16 return 0;
17 }

有一個node型別的陣列node arr[100],想對它進行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b還相同,就按c降序排列。就可以寫一個比較函式:

struct node
{    
int a;    
int b;    
double c;
}
bool cmp(node x,node y)
{    
if(x.a!=y.a) return x.a<y.a;    
if(x.b!=y.b) return x.b>y.b;    
return x.c>y.c;
}

相關文章