C轉C++之struct和sort函式
之前由詳細講過排序的妙用,詳情可以傳送,這里就不贅述了,但有一個很現實的問題就是每次解題的時候C根本就沒有自帶sort函式呀!!為了防止冒泡排序或桶排序超時,只能打上快速排序的代碼(不得不說,太長了,也很容易因為一些小細節而寫錯),因為這個原因挺煩心的,這也是為什么我一直想轉C++的原因,
C與C++之struct的異同
順便先提一下兩者的不同,在C語言中,在定義好struct后使用的時候要寫上關鍵字struct,到C++就可以省略不寫啦!萬歲!
struct point{
int x,y;
};
//struct point p[100];
//傳統C就要加上關鍵字struct
point p2[100];
C與C++之sort函式
據C++ PRIMER可知其實C++的內置排序函式很豐富,詳情如下
| 函式名 | 功能描述 |
|---|---|
| sort | 對給定區間所有元素進行排序 |
| stable_sort | 對給定區間所有元素進行穩定排序 |
| partial_sort | 對給定區間所有元素部分排序 |
| partial_sort_copy | 對給定區間復制并排序 |
| nth_element | 找出給定區間的某個位置對應的元素 |
| is_sorted | 判斷一個區間是否已經排好序 |
| partition | 使得符合某個條件的元素放在前面 |
| stable_partition | 相對穩定的使得符合某個條件的元素放在前面 |
但就我個人的使用情況來看,可能用的上的只有sort函式了,也因為篇幅原因,本篇博客只重點強調和講解sort的升序和降序排列,更多資料可閱讀專業書籍,
先來看看復雜度吧,n*log2n,比冒泡之類的排序演算法效率要高,但沒有快排快(但其實也差不了多少)
其他常見排序演算法可見這篇文章
標準形式
先要引入頭檔案
#include <algorithm>
sort的物件可以是vector陣列也可以是傳統的int a[]的陣列
如果你是學C,還不知道vector,可以看下這篇文章
具體形式
sort(start,end,cmp)
*start表示排序陣列的起始地址(要是地址!!)
如果用vector陣列的話,因為vector是容器,故要用v.begin() v.end()表示頭尾
如果用傳統的int a[]的陣列就可以直接用a a+n表示頭尾
*end表示陣列結束地址的下一位(是下一位!!可以類比字串的’\0’)
*cmp自定義排序方法,可不填,默認升序
如果要降序排列咋辦?
補上cmp這個函式
bool cmp(int a, int b){ return a>b; }關于這個我的理解是這樣的,如果要升序,那么右邊肯定是最大的嘛,就是A<B<C<也就是<
如果是降序,左邊最大,就是A>B>C>也就是>
這樣可能會有助于你記憶cmp這個函式
使用示例
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int a, int b){
return a>b;
}
int main(){
int i;
int a1[]={3,4,2,5,8,7,6,9,1};
vector<int> a2(9);
for ( i=0; i<9; i++ )
cin >> a2[i];
sort ( a1, a1+9 );
sort ( a2.begin(), a2.end());
for ( i=0; i<9; i++ )
cout << a1[i];
cout << endl;
for ( i=0; i<9; i++ )
cout << a2[i];
cout << endl;
return 0;
}
進階用法
以下內容摘自百度百科,其實這個進階用法在我們生活中也比較常見,比如高考總分相同的情況下,理科生看數學成績進行排名,但因為我目前用不到,所以就不深入講解,以后有時間再另外寫一篇來總結,
假設自己定義了一個結構體node
struct node { int a; int b; double c; }有一個node型別的陣列node arr[100],想對它進行排序:先按a值升序排列,如果a值相同,再按b值降序排列,如果b還相同,就按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; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/200447.html
標籤:其他
上一篇:用C語言撰寫低耦合程式
下一篇:STL(第一彈)——sort
