1.程式一秒的執行時限,所設計的演算法複雜度不能超過百萬級別,即不能超過1千萬。若演算法複雜度是o(n^2),則該n不應大於3000,否則會達到千萬數量級複雜度。
2.qsort 的使用方法:
一、對int型別陣列排序
int num[100];
int cmp ( const void *a , const void *b )
return *(int *)a - *(int *)b; //公升序排序
//return *(int *)b - *(int *)a; //降序排序
/*可見:引數列表是兩個空指標,現在他要去指向你的陣列元素。所以轉型為你當前的型別,然後取值。
公升序排列時,若第乙個引數指標指向的「值」大於第二個引數指標指向的「值」,則返回正;若第乙個引數指標指向的「值」等於第二個引數指標指向的「值」,則返回零;若第乙個引數指標指向的「值」小於第二個引數指標指向的「值」,則返回負。
降序排列時,則剛好相反。
qsort(s,n,sizeof(s[0]),cmp);
示例完整函式(已在 vc6.0上執行通過):
#include
#include
#include
int s[10000],n,i;
int cmp(const void *a,const void *b)
int main()
s[100]
//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵資料data的型別可以很多種,參考上面的例子寫
int cmp( const void *a ,const void *b)
return (*(in *)a).data > (*(in *)b).data ? 1 : -1;
//注意,這條語句在vc6.0環境下執行可能會出錯,但是並不是語句錯了,而是你要先 build ,或者全部重建。總之語句是對的。
//或者你可以將這上面1條語句改成下面這3條語句
//struct in *aa = (in *)a;
//struct in *bb = (in *)b;
//return aa->data > bb->data ? 1 : -1;
qsort(s,100,sizeof(s[0]),cmp);
五、對結構體二級排序
struct in
int x; //你可以比喻成:失敗次數
int y; //你可以比喻成:成功次數
}s[100];
//按照x從小到大排序,當x相等時按照y從大到小排序。 你可以想象成:失敗是主要因素的乙個問題,先比較 失敗次數少,失敗次數相同 再看 成功次數多。
int cmp( const void *a , const void *b )
struct in *c = (in *)a;
struct in *d = (in *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
qsort(s,100,sizeof(s[0]),cmp);
六、對字串進行排序
struct in
int data;
char str[100];
}s[100];
//按照結構體中字串str的字典順序排序
int cmp ( const void *a , const void *b )
return strcmp( (*(in *)a)->str , (*(in *)b)->str );
qsort(s,100,sizeof(s[0]),cmp);
注意!qsort 中的 cmp 得自己寫 。
c++sort()的用法:
預設sort排序後是公升序,如果想讓他降序排列,可以使用自己編的cmp函式
#include
#include
using namespace std;
int cmp(int a,int b)
int main() ; //只能在初始化列表中賦值
} (2)const修飾成員函式
const修飾類的成員函式,則該成員函式不能修改類中任何非const成員函式。一般寫在函式的最後來修飾。
class a
對於const類物件/指標/引用,只能呼叫類的const成員函式,因此,const修飾成員函式的最重要作用就是限制對於const物件的使用。
a. const成員函式不被允許修改它所在物件的任何乙個資料成員。
b. const成員函式能夠訪問物件的const成員,而其他成員函式不可以。
(3)const修飾類物件/物件指標/物件引用
· const修飾類物件表示該物件為常量物件,其中的任何成員都不能被修改。對於物件指標和物件引用也是一樣。
· const修飾的物件,該物件的任何非const成員函式都不能被呼叫,因為任何非const成員函式會有修改成員變數的企圖。
例如:class aaa
const aaa aobj;
aobj.func1(); ×
aobj.func2(); 正確
const aaa* aobj = new aaa();
aobj-> func1(); ×
aobj-> func2(); 正確
三、將const型別轉化為非const型別的方法
採用const_cast 進行轉換。
用法:const_cast (expression)
該運算子用來修改型別的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的型別是一樣的。
· 常量指標被轉化成非常量指標,並且仍然指向原來的物件;
· 常量引用被轉換成非常量引用,並且仍然指向原來的物件;
· 常量物件被轉換成非常量物件。
5.直接在struct中寫operator《操作,比重新寫乙個cmp函式,在呼叫sort函式時,耗時少
《計算機考研 機試指南》 1經典入門
1.2日期類問題 1.3 hash的應用 1.4 排版題 1.5 查詢 1.6 貪心演算法 主要掌握 氣泡排序等常見排序方法,自帶函式sort 以及自定義排序函式,過載操作符。sort函式 c sort函式的使用總結 語法描述 sort begin,end,cmp cmp引數可以沒有,如果沒有預設非...
《王道論壇計算機考研機試指南》第七章 動態規劃
n階樓梯上樓問題 include using namespace std int f 91 int main 不容易系列之一 攔截飛彈 include include using namespace std intlist 26 按襲擊事件順序儲存各飛彈高度 int dp 26 dp i 儲存以第i...
計算機原理第二章
第2章計算機的邏輯部件 2.1數字邏輯電路基礎知識 2.2邏輯函式的化簡 2.3加法器設計 2.4解碼器設計 2.5計數器設計 2.6 eda技術 1.加法器 解碼器等常用晶元的邏輯功能 介紹了加法器 解碼器等中規模器件設計組合邏輯電路 解決實際問題的思路與方法。理解基本邏輯運算 邏輯運算規則 邏輯...