排序演算法是一種基本並且常用的演算法。由於實際工作中處理的數量巨大,所以排序演算法
對演算法本身的速度要求很高。
而一般我們所謂的演算法的效能主要是指演算法的複雜度,一般用o方法來表示。在後面我將給出詳細的說明。
對於排序的演算法我想先做一點簡單的介紹,也是給這篇文章理乙個提綱。
我將按照演算法的複雜度,從簡單到難來分析演算法。
第一部分是簡單排序演算法,後面你將看到他們的共同點是演算法複雜度為o(n*n)(因為沒有使用word,所以無法打出上標和下標)。
第二部分是高階排序演算法,複雜度為o(log2(n))。這裡我們只介紹一種演算法。另外還有幾種演算法因為涉及樹與堆的概念,所以這裡不於討論。
第三部分類似動腦筋。這裡的兩種演算法並不是最好的(甚至有最慢的),但是演算法本身比較奇特,值得參考(程式設計的角度)。同時也可以讓我們從另外的角度來認識這個問題。
第四部分是我送給大家的乙個餐後的甜點——乙個基於模板的通用快速排序。由於是模板函式可以對任何資料型別排序(抱歉,裡面使用了一些論壇專家的呢稱)。
現在,讓我們開始吧:
一、簡單排序演算法
由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行**,並在我的vc環境下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c++的平台上應該也不會有什麼問題的。在**的後面給出了執行過程示意,希望對理解有幫助。
1.冒泡法:
這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡:
#include
void bubblesort(int* pdata,int count)
}while(i<=j);//如果兩邊掃瞄的下標交錯,就停止(完成一次)
//當左邊部分有值(lefti),遞迴右半邊
if(right>i)
run(pdata,i,right);
}void quicksort(int* pdata,int count)
void main()
;quicksort(data,7);
for (int i=0;i<7;i++)
cout<
void bubble2sort(int* pdata,int count)
pdata[w+k] = itemp;}}
}void main()
;shellsort(data,12);
for (int i=0;i<12;i++)
cout<(cmydata& data );
private:
char* m_strdatamember;
int m_idatasize;
};mydata.cpp檔案
cmydata::cmydata():
m_iindex(0),
m_idatasize(0),
m_strdatamember(null)
cmydata::~cmydata()
cmydata::cmydata(int index,char* strdata):
m_iindex(index),
m_idatasize(0),
m_strdatamember(null)
cmydata& cmydata::operator =(cmydata &srcdata)
bool cmydata::operator <(cmydata& data )
/////
//主程式部分
#include
#include "mydata.h"
template
void run(t* pdata,int left,int right)
}while(i<=j);//如果兩邊掃瞄的下標交錯,就停止(完成一次)
//當左邊部分有值(lefti),遞迴右半邊
if(right>i)
run(pdata,i,right);
}template
void quicksort(t* pdata,int count)
void main()
;quicksort(data,8);
for (int i=0;i<8;i++)
cout<
cout<<"/n"; }最後,希望大家愉快的程式設計。有什麼意見,給我提吧! 結合最近自己做的一些工作,用到了第三方控制項advstringgrid,這裡就常用的一些技巧做個小小的總結 1 如何設定 固定的列數,如下圖所示 這裡固定的列數為3列,通過設定下面屬性來改變固定的列數 advstringgrid.fixedcols n n為要固定的列數值 2 如何從advstrin... 很不錯的文章,所以轉貼之!最近公司的產品一直忙於測試,看著每天的bug不斷的增加和修正,真是痛並快樂著,痛苦是因為bug不斷的出現,快樂是看著bug乙個乙個的被消滅,把這些天的測試開發過程總結一下。1 測試要盡早 公司的產品已經修訂一段時間了,但是由於任務繁忙和人手不足,因此測試一直拖後,因此當進行... 今天很是鬱悶,因為我以下的這些文字是第二次打入,艾,斷線,提交失敗,資料清空 看來要改進我的後台系統了 近些時間來,我也發現一些細節問題。有不少使用者有意無意地在標題裡加上一些無意義的阿拉伯數字,我明白 這些使用者也同樣的遇到了重複資訊拒絕發布的困擾了,這樣做也是為了規避這樣的限制。結合今天的這位向...AdvStringGrid使用小結 轉
測試開發過程總結 轉貼
SQL語句SELECT TOP用法小結 轉)