什么是插入排序?
在插入排序法中,將檢查數(shù)組中的每個元素,將它插入排序中的元素的適當位置,當最后一個元素插入到它適當?shù)奈恢脮r,這個數(shù)組就排好序了。例如,
假如我們要對一個有5個元素的數(shù)組進行升序排列,假設(shè)第一個元素的值被假定為已排好序了,那么我們將第2個元素插入到已排序好的數(shù)組中的適當位置上,使得數(shù)組應(yīng)該是排序好的。依次類推,將第3個插入到到已排序好的數(shù)組中的適當位置,使得插入后數(shù)組仍然是排序好的,。。。。。。
下面是一個插入排序的Demo:

int tarArr[]=
{10,1,35,12,7,17,66,6,56,26};
int size = sizeof(tarArr)/sizeof(tarArr[0]);

void insertSort(void)


{
int i=0,j=0;
for(i=1;i<size;i++)

{
int nextValue = tarArr[i];
for(j=i-1;j>=0;j--)

{
if(nextValue<tarArr[j])
tarArr[j+1]=tarArr[j];
else

{
break;
}
}
tarArr[j+1]=nextValue;
}
}
下面來介紹一下希爾排序:
希爾排序就是將要排序的數(shù)據(jù)先分成如果組,對每一組實行插入排序。
代碼如下:

int tarArr[]=
{10,1,35,12,7,17,66,6,56,26};
int size = sizeof(tarArr)/sizeof(tarArr[0]);

void shellSort(void)


{
int gap =0,i=0,j=0;
for(gap = size/2;gap>0;gap/=2)

{
for(i=gap;i<size;i+=gap)

{
int nextValue = tarArr[i];
for(j=i-gap;j>=0;j-=gap)

{
if(nextValue<tarArr[j])
tarArr[j+gap] = tarArr[j];
else

{
break;
}

}
tarArr[j+gap] = nextValue;
}
}
}
模板函數(shù)如下:
template<class T>
T max(T x, T y)
{
return x>y ? x:y;
}
void testMax(void)
{
max(1,2);//因為兩個參數(shù)都是int型,所以編譯器會根據(jù)參數(shù)而推導(dǎo)出使用max<int>這個版本
max(1.2,3.4);//通過兩個參數(shù)都為double型,推導(dǎo)出使用max<double>這個版本
max('a',12);//會出現(xiàn)編譯錯誤,因為兩個參數(shù),一個為char ,另一個為int ,所以編譯器無法根據(jù)類型推導(dǎo)出使用哪一個版本
//可以通過顯示的制定使用哪個版本,從而解決這個問題
max<int>('a',12);
}
技術(shù)書:
1.《c++程序設(shè)計語言》——c++的老爹的大作。讀了第一部分和第二部分。關(guān)于STL的所有內(nèi)容掠過。
2.《Sqlite》——嵌入式關(guān)系數(shù)據(jù)庫的介紹,對理解關(guān)系數(shù)據(jù)庫很有幫助。本來想研究一下sqlite的源代碼,我發(fā)現(xiàn)我水平有限,還沒那水平,但愿有一天我這美好的愿望能實現(xiàn)。
3.《算法導(dǎo)論》。買這本書是因為我對KMP算法的費解。不過我覺得這本書寫的很不錯,數(shù)據(jù)結(jié)構(gòu)和基本算法寫的都不錯。
4.《win32多線程程序設(shè)計》還沒讀完,明年希望結(jié)合這本書寫個線程池出來。
5.《Inside the c++ object model》解釋c++的底層實現(xiàn),對c++功底要求高,我只懂了部分內(nèi)容,不過對virtual function的理解很有幫助。
6.《Effective c++》更適合c++初學(xué)者的書。很不錯。
7.《你的燈還亮著嗎》關(guān)于程序員。
其他書:
1.《蘇菲的世界》哲學(xué)入門書,很有意思的一本書。
2.《荷包里的單人床》——張小嫻,關(guān)于女人和愛情。
3.《目送》——龍應(yīng)臺,關(guān)于親情和無奈。感動。
4.《活著》——余華,關(guān)于生活與活著,一本讓我淚流滿面的書。
5.《與眾不同的心理學(xué)》很有道理的一本書,印象最深的是:人們相信星座,是因為把大眾的東西個性化啦!我覺得很有道理。
廣播劇:致我們終將失去的青春。在此列出是因為我是如此的喜歡這部廣播劇。以至于我覺得它是值得我記住的。
2010年還是有收獲的一年,畢業(yè)工作。平靜也算充實。但是還有很多做得不夠,不夠淡定,容易被瑣碎的事心煩。2011年不再浮華,努力學(xué)習(xí)!好好工作!!
2011年要做得事情還有很多。
要看的技術(shù)書:
1.《泛型編程和STL》
2.《編程之美》
3.《win32程序設(shè)計》+線程池模型程序代碼
4.《大話設(shè)計模式》
5.《Domain-Driven Design》
要看一下經(jīng)濟類的書
要看的其他書:
1.《穆斯林的葬禮》
2.張小嫻散文集
要去報個英語口語班,英語學(xué)習(xí)不能怠慢啊,否則英語會廢掉的。
2010年還剩沒幾天啦,開開心心的回家過春節(jié)!!好好休息一下,2011年希望自己天天開心,日子過得充實!!多讀書讀好書!!加油!!
筆者c++的經(jīng)驗:半年的c++開發(fā)經(jīng)驗。
相比于前些日子讀的《深入探索c++對象模型》,這本書更適合于初學(xué)者。侯捷老師翻譯的清晰流暢。
本書有9章共55個item。
本書的前四章,個人認為對于有一定c++基礎(chǔ)的人來說都會受益匪淺。告訴了你很多的編程習(xí)慣。好的編程習(xí)慣是程序健壯性的一個重要保障。
書中不僅告訴你怎么樣做,還告訴你為什么這樣做,這讓我突然想起來以前的老大跟我說的話,不僅要知道how,還要知道why。這本書會告訴你why。
很多事情知道了why,how就會很好理解。
第五章因為牽涉到異常的處理,我對c++的異常不是很了解,還要差更多的資料再來讀第五章。第五章只是大略看了一下。
第六章繼承和面向?qū)ο笤O(shè)計。
我覺得讀這章更適合于設(shè)計,大型項目的時候用的多一些,對于平時寫點兒小程序,貌似是用不到,不過他對于public繼承和private繼承的描述還是讓人有種恍然大明白的感覺。(*^__^*) 嘻嘻……
第七章 模板與泛型編程
本章打算與侯捷老師的佳作《泛型編程與STL》結(jié)合看。書已經(jīng)買到啦,春節(jié)回來繼續(xù)努力~\(≧▽≦)/~啦啦啦。
第八章第九章
大略看了一下。不發(fā)表意見啦。
對于有半年c++學(xué)習(xí)經(jīng)驗的我看這本書的時候確實挺吃力的,不過也正是因為很多地方不懂,所以在看這本書的時候查了很多資料,有了更多的收獲。
首先是看不懂的地方:對于虛擬繼承和多重繼承的內(nèi)容,我只是瀏覽了一下,因為我的能力實在是看不了這兩部分的內(nèi)容。
我之所以看這本書,是源于我對一個問題很糾結(jié):這個問題是:指向類成員函數(shù)的指針的問題。這個問題讓我很糾結(jié),可是這本書對這個問題講解的確實很透徹(第四章是對這個問題的講解)。
這本書讓我印象最深的是對于多態(tài)的實現(xiàn)(動態(tài)綁定)的講解。virtual table的使用。通過它讓我對于繼承、多態(tài)有了更深刻的了解。
這本書中有很多的圖表用來表示class object的結(jié)構(gòu),清晰明了。值得一看!
這本書看完后,有收獲,但是離吃透這本書還差的遠,我還要繼續(xù)努力!差距還是很大滴,繼續(xù)努力!!
在網(wǎng)絡(luò)傳輸中要傳輸?shù)臄?shù)據(jù)往往是不定長的,一般我們可以分配足夠的空間,使用某個字段用于記錄傳輸?shù)臄?shù)據(jù)的長度。然后對數(shù)據(jù)壓縮后再進行傳輸。
定義數(shù)據(jù)結(jié)構(gòu)
typedef struct tagTransferData
{
///一些其他信息////
DWORD dataSize;
char buffer[1];//定義一個可變長度的數(shù)組
}Data,*PData;
使用:
PData pData = (PData)malloc(10000);
memset(pData,0,10000);
。。。。。。。。。
char sendData[]="good morning everyone!";
strcpy(pData->buffer,send
Data);
pData->dataSizse = strlen(sendData);
。。。。。。。。。
delete pData;
該數(shù)據(jù)結(jié)構(gòu):對于一塊內(nèi)存,開始記錄了后面要傳輸數(shù)據(jù)的大小,緊接著是要傳輸?shù)臄?shù)據(jù)。是的數(shù)據(jù)比較緊湊,易于管理。
個人認為:分配的多余的空間使用數(shù)據(jù)壓縮后,不會導(dǎo)致傳輸太多的無用數(shù)據(jù)。
int WSAStartup(
__in WORD wVersionRequested,
__out LPWSADATA lpWSAData
);
WSAStartup
格 式: int PASCAL FAR WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );
參 數(shù): wVersionRequested 欲使用的 Windows Sockets API 版本
lpWSAData 指向 WSADATA 資料的指標
傳回值: 成功 – 0
失敗 - WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL
說明: 此函式「必須」是應(yīng)用程式呼叫到 Windows Sockets DLL 函式中的第一個,也唯有此函式呼叫成功後,才可以再呼叫其他 Windows Sockets DLL 的函式。此函式亦讓使用者可以指定要使用的 Windows Sockets API 版本,及獲取設(shè)計者的一些資訊。程式中我們要用 Winsock 1.1,所以我們在程式中有一段為:
WSAStartup((WORD)((1<<8)|1),(LPWSADATA) &WSAData)
其中 ((WORD)((1<<8)|1) 表示我們要用的是 Winsock 「1.1」版本,而WSAData 則是用來儲存由系統(tǒng)傳回的一些有關(guān)此一 Winsock Stack 的資料。
The WSAStartup function initiates use of the Winsock DLL by a process.
在使用WSAStartup的使用出現(xiàn)了下面的問題:
源碼:
#include "stdafx.h"
#include<windows.h>
int main()
{
WSADATA wsa={0};
WSAStartup(MAKEWORD(2,2),&wsa);
return 0;
}
出現(xiàn)的錯誤信息:
錯誤 1 error LNK2019: 無法解析的外部符號 _WSAStartup@8,該符號在函數(shù) _main 中被引用 CompletePortDemo.obj CompletePortDemo
解決方法:添加#pragma comment(lib,"ws2_32.lib")
正確代碼:
#include "stdafx.h"
#include<windows.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsa={0};
WSAStartup(MAKEWORD(2,2),&wsa);
return 0;
}
原因缺少.def文件。
在項目中添加一個def文件。eg. test.def.
然后
項目屬性->鏈接器->輸入->模塊定義文件->在里面添上test.def即可解決問題