新增在標頭檔案algorithm中, 使用方法如:
sort(start,end[,排序方法])
int a[5] = ;
sort(a, a+5); //這是最簡單的sort方法, 使用預設的排序方法公升序排列
sort(a, a+5, cmp); // cmp為bool函式名, 是自定義規則比較函式
//自定義的cmp函式
bool cmp(int a, int b)
stl提供的一種bool二分搜尋函式, 使用方式為:
binary_search(start, end, argu);返回true或falseif (binary_search(a, a+5, 3))
返回第乙個大於或等於x的第乙個位置
使用方法為:
lower_bound(start, end, x); //返回的是指標一般這樣:
int a[5] = ;返回第乙個大於x的第乙個位置int p = lower_bound(a, a+5, x) - a;
cout << a[p]; //p的值對應陣列a的下標
使用方法為:
upper_bound(start, end, x); //返回的是指標一般這樣:
int a[5] = ;參考書目見紫書p108, 以及網上各部落格int p = upper_bound(a, a+5, x) - a;
cout << a[p]; //p的值對應陣列a的下標
普通的二分查詢函式是對公升序的序列進行查詢的, 也就是對乙個降序序列查詢是錯誤的, 那麼這些函式和sort類似, 就應該新增乙個方法函式, 如:
bool cmp(int a, int b)
binary_search(a, a+1000, 33, cmp);
其他函式類似.
乙個綜合的應用如下
#include
#include
#include
#include
using
namespace
std;
bool cmp(int a, int b)
int main()
; for( int i = 0; i < 1000; ++i )
cout
<< "sizeof a / int: "
<< sizeof(a)/sizeof(int) << endl;
sort(a, a+1000);
for( int i = 0; i < 1000; ++i )
if(binary_search(a, a+1000, 555))
sort(a, a+1000, cmp);
for( int i = 0; i < 1000; ++i )
if(binary_search(a, a+1000, 555, cmp))
int p = lower_bound(a, a+1000, 345, cmp) - a;
cout
<< "a[p] == "
<< a[p] << endl;
p = upper_bound(a, a+1000, 345, cmp) - a;
cout
<< "a[p] == "
<< a[p] << endl;
}
輸出結果為
sizeof a / int: 1000yes ! there is 555
yes ! there is 555
a[p] == 345
a[p] == 344
STL初步 排序與檢索
e.g.現有n個大理石,每個大理石上寫了乙個非負整數。首先把每個數從小到大排序,然後回答q個問題。每個問題問是否有乙個大理石寫著某個整數x。如果是,要回答在哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。solution 先排序,後查詢 關於排序 sort使用陣列元素預設的大小比較運算子進行...
c 排序與檢索函式
問題描述 現有n個大理石,每個大理石上寫了乙個非負整數 首先把各數從小到大排序 然後回答q個問題。每個問題問是否有乙個大理石寫著某個整數x,如果是,還要回答哪個大理石上寫著x。排序後的大理石從左到右編號為1 n。輸入大理石數量和需要回答問題數量,然後輸入大理石上的每個非負整數,接著輸入x 樣例輸入 ...
mysql怎麼排序檢索 mysql排序檢索資料
1 排序資料 select 表的欄位名 from 對應的表名 order by 表的欄位名 2 按多個列排序 select 表的欄位名,表的欄位名,表的欄位名,from 對應的表名 order by 表的欄位名,表的欄位名,表的欄位名,如果表的字段中的值是唯一的,則按照該欄位進行排序就可以了 3 指...