計算機考研機試指南 第二章

2022-07-31 22:15:18 字數 3096 閱讀 6862

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.加法器 解碼器等常用晶元的邏輯功能 介紹了加法器 解碼器等中規模器件設計組合邏輯電路 解決實際問題的思路與方法。理解基本邏輯運算 邏輯運算規則 邏輯...