国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

常見排序的原理和C++實現(一)——STL庫中sort的使用方法

2019-11-08 02:46:08
字體:
來源:轉載
供稿:網友

記得以前面試的時候面試官讓我手寫排序,結果我磨蹭半天寫了個選擇排序,保不齊還有語法錯誤。后來我學會了寫冒泡排序,但是后來刷題發現一言不合就超時,后來我學會了寫快排,但是后來發現每次都寫一遍好心累,直到我知道了sort,所以這次就功利主義地總結一下sort的用法。

一、管中窺豹: 先看一個最簡單的sort的例子:

#include<iostream>#include<algorithm> //sort需要的頭文件using namespace std;int main(){ int data[10] = { 1, 5, 2, 3, 4, 12, 3, 4, 5, 7 }; sort(data, data + 10); for (int i = 0; i < 10; ++i) cout << data[i]<<' '; getchar(); return 0;}

結果為:1 2 3 3 4 4 5 5 7 12 從中我們可以發現:sort()函數的排序默認升序排序的。

二、sort詳解 事實上,sort用兩種使用方法: ①sort(迭代器開始,迭代器結束) ②sort(迭代器開始,迭代器結束,比較函數的指針) 針對第一種表示方法,得到是升序排序,數組,vector和string都可以使用sort進行排序,例如:

string data = "1789207638";sort(data.begin(), data.end());

針對第二種表示方法,比較函數的的作用是:如果進行比較的兩個元素,第一個在第二個前面,則返回true,否則返回false。 比如這個例子:

#include<iostream>#include<algorithm> //sort需要的頭文件using namespace std;bool compare(const char a, const char b){ if (a >= b) return false; //Attention!!! else return true;}int main(){ //int data[10] = { 1, 5, 2, 3, 4, 12, 3, 4, 5, 7 }; //sort(data, data + 10, compare); string data = "1789207638"; sort(data.begin(), data.end(),compare); for (int i = 0; i < 10; ++i) cout << data[i]<<' '; getchar(); return 0;}

這里需要特別注意一點:compare函數中,如果兩個元素相等,要返回false,返回true編譯器很有可能報錯。compare函數的形參可以使指針,也可以是引用,也可以直接傳值。

三、復雜排序 利用自定義compare,我們可以實現一些復雜的排序方式,比如:根據學生的成績排序,成績相等的情況下根據學生姓名排序等。 比如pat的這道題,用sort和compare相結合,可以大大壓縮代碼量: http://blog.csdn.net/QQ_22194315/article/details/54584201

四、sort與qsort qsort是stdlib.h中的排序函數。 qsort的使用方法是: qsort(待排序數組首地址,排序的元素,單個排序元素占用空間的大小,比較函數的指針) 這個比較函數比較復雜,首先函數返回值必須是int,其次,形參類型必須寫成const void*,最后如果希望第一個元素排在第二個前,返回一個正值,如果希望第一個元素排在第二個元素后,返回一個負值,如果第一個元素和第二個元素相等,返回0. 至于這個返回值的值究竟多大,說實話我也不甚了解。 qsort可以用在數組上,用在字符串和vector上不方便。

#include<iostream>#include<stdlib.h> //qsort需要的頭文件using namespace std;int compare(const void *a, const void *b){ return (*(int *) b- *(int *)a);}int main(){ int data[10] = { 1, 5, 2, 3, 4, 12, 3, 4, 5, 7 }; qsort(data, 10,sizeof(int),compare); for (int i = 0; i < 10; ++i) cout << data[i]<<' '; getchar(); return 0;}

總得來說,個人感覺在寫代碼時,還是sort更加方便。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 彩票| 兴业县| 长顺县| 蚌埠市| 孟村| 南丰县| 浦城县| 贺州市| 独山县| 天峨县| 曲阳县| 江北区| 琼海市| 封丘县| 循化| 郓城县| 简阳市| 射阳县| 思南县| 常熟市| 涟源市| 通河县| 纳雍县| 晋中市| 新田县| 山阳县| 澎湖县| 宁陵县| 城步| 大埔区| 阿合奇县| 鄂尔多斯市| 沙坪坝区| 南城县| 喀喇沁旗| 普定县| 昭觉县| 长沙市| 罗甸县| 濮阳市| 克什克腾旗|