亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 各種排序算法小結.txt

?? 各種排序算法小結
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
//當左邊部分有值(left<j),遞歸左半邊 
if(left<j) 
run(pData,left,j); 
//當右邊部分有值(right>i),遞歸右半邊 
if(right>i) 
run(pData,i,right); 
} 

void QuickSort(int* pData,int Count) 
{ 
run(pData,0,Count-1); 
} 

void main() 
{ 
int data[] = {10,9,8,7,6,5,4}; 
QuickSort(data,7); 
for (int i=0;i<7;i++) 
cout<<data[i]<<" "; 
cout<<"\n"; 
} 

這里我沒有給出行為的分析,因為這個很簡單,我們直接來分析算法:首先我們考慮最理想的情況 
1.數組的大小是2的冪,這樣分下去始終可以被2整除。假設為2的k次方,即k=log2(n)。 
2.每次我們選擇的值剛好是中間值,這樣,數組才可以被等分。 
第一層遞歸,循環n次,第二層循環2*(n/2)...... 
所以共有n+2(n/2)+4(n/4)+...+n*(n/n) = n+n+n+...+n=k*n=log2(n)*n 
所以算法復雜度為O(log2(n)*n) 
其他的情況只會比這種情況差,最差的情況是每次選擇到的middle都是最小值或最大值,那么他將變 
成交換法(由于使用了遞歸,情況更糟)。但是你認為這種情況發生的幾率有多大??呵呵,你完全 
不必擔心這個問題。實踐證明,大多數的情況,快速排序總是最好的。 
如果你擔心這個問題,你可以使用堆排序,這是一種穩定的O(log2(n)*n)算法,但是通常情況下速度要慢 
于快速排序(因為要重組堆)。 

三、其他排序 
1.雙向冒泡: 
通常的冒泡是單向的,而這里是雙向的,也就是說還要進行反向的工作。 
代碼看起來復雜,仔細理一下就明白了,是一個來回震蕩的方式。 
寫這段代碼的作者認為這樣可以在冒泡的基礎上減少一些交換(我不這么認為,也許我錯了)。 
反正我認為這是一段有趣的代碼,值得一看。 
#include <iostream.h> 
void Bubble2Sort(int* pData,int Count) 
{ 
int iTemp; 
int left = 1; 
int right =Count -1; 
int t; 
do 
{ 
//正向的部分 
for(int i=right;i>=left;i--) 
{ 
if(pData[i]<pData[i-1]) 
{ 
iTemp = pData[i]; 
pData[i] = pData[i-1]; 
pData[i-1] = iTemp; 
t = i; 
} 
} 
left = t+1; 

//反向的部分 
for(i=left;i<right+1;i++) 
{ 
if(pData[i]<pData[i-1]) 
{ 
iTemp = pData[i]; 
pData[i] = pData[i-1]; 
pData[i-1] = iTemp; 
t = i; 
} 
} 
right = t-1; 
}while(left<=right); 
} 

void main() 
{ 
int data[] = {10,9,8,7,6,5,4}; 
Bubble2Sort(data,7); 
for (int i=0;i<7;i++) 
cout<<data[i]<<" "; 
cout<<"\n"; 
} 


2.SHELL排序 
這個排序非常復雜,看了程序就知道了。 
首先需要一個遞減的步長,這里我們使用的是9、5、3、1(最后的步長必須是1)。 
工作原理是首先對相隔9-1個元素的所有內容排序,然后再使用同樣的方法對相隔5-1個元素的排序 
以次類推。 
#include <iostream.h> 
void ShellSort(int* pData,int Count) 
{ 
int step[4]; 
step[0] = 9; 
step[1] = 5; 
step[2] = 3; 
step[3] = 1; 

int iTemp; 
int k,s,w; 
for(int i=0;i<4;i++) 
{ 
k = step[i]; 
s = -k; 
for(int j=k;j<Count;j++) 
{ 
iTemp = pData[j]; 
w = j-k;//求上step個元素的下標 
if(s ==0) 
{ 
s = -k; 
s++; 
pData[s] = iTemp; 
} 
while((iTemp<pData[w]) && (w>=0) && (w<=Count)) 
{ 
pData[w+k] = pData[w]; 
w = w-k; 
} 
pData[w+k] = iTemp; 
} 
} 
} 

void main() 
{ 
int data[] = {10,9,8,7,6,5,4,3,2,1,-10,-1}; 
ShellSort(data,12); 
for (int i=0;i<12;i++) 
cout<<data[i]<<" "; 
cout<<"\n"; 
} 
呵呵,程序看起來有些頭疼。不過也不是很難,把s==0的塊去掉就輕松多了,這里是避免使用0 
步長造成程序異常而寫的代碼。這個代碼我認為很值得一看。 
這個算法的得名是因為其發明者的名字D.L.SHELL。依照參考資料上的說法:“由于復雜的數學原因 
避免使用2的冪次步長,它能降低算法效率。”另外算法的復雜度為n的1.2次冪。同樣因為非常復雜并 
“超出本書討論范圍”的原因(我也不知道過程),我們只有結果了。 


四、基于模板的通用排序: 
這個程序我想就沒有分析的必要了,大家看一下就可以了。不明白可以在論壇上問。 
MyData.h文件 
/////////////////////////////////////////////////////// 
class CMyData 
{ 
public: 
CMyData(int Index,char* strData); 
CMyData(); 
virtual ~CMyData(); 

int m_iIndex; 
int GetDataSize(){ return m_iDataSize; }; 
const char* GetData(){ return m_strDatamember; }; 
//這里重載了操作符: 
CMyData& operator =(CMyData &SrcData); 
bool operator <(CMyData& data ); 
bool operator >(CMyData& data ); 

private: 
char* m_strDatamember; 
int m_iDataSize; 
}; 
//////////////////////////////////////////////////////// 

MyData.cpp文件 
//////////////////////////////////////////////////////// 
CMyData::CMyData(): 
m_iIndex(0), 
m_iDataSize(0), 
m_strDatamember(NULL) 
{ 
} 

CMyData::~CMyData() 
{ 
if(m_strDatamember != NULL) 
delete[] m_strDatamember; 
m_strDatamember = NULL; 
} 

CMyData::CMyData(int Index,char* strData): 
m_iIndex(Index), 
m_iDataSize(0), 
m_strDatamember(NULL) 
{ 
m_iDataSize = strlen(strData); 
m_strDatamember = new char[m_iDataSize+1]; 
strcpy(m_strDatamember,strData); 
} 

CMyData& CMyData::operator =(CMyData &SrcData) 
{ 
m_iIndex = SrcData.m_iIndex; 
m_iDataSize = SrcData.GetDataSize(); 
m_strDatamember = new char[m_iDataSize+1]; 
strcpy(m_strDatamember,SrcData.GetData()); 
return *this; 
} 

bool CMyData::operator <(CMyData& data ) 
{ 
return m_iIndex<data.m_iIndex; 
} 

bool CMyData::operator >(CMyData& data ) 
{ 
return m_iIndex>data.m_iIndex; 
} 
/////////////////////////////////////////////////////////// 

////////////////////////////////////////////////////////// 
//主程序部分 
#include <iostream.h> 
#include "MyData.h" 

template <class T> 
void run(T* pData,int left,int right) 
{ 
int i,j; 
T middle,iTemp; 
i = left; 
j = right; 
//下面的比較都調用我們重載的操作符函數 
middle = pData[(left+right)/2]; //求中間值 
do{ 
while((pData[i]<middle) && (i<right))//從左掃描大于中值的數 
i++; 
while((pData[j]>middle) && (j>left))//從右掃描大于中值的數 
j--; 
if(i<=j)//找到了一對值 
{ 
//交換 
iTemp = pData[i]; 
pData[i] = pData[j]; 
pData[j] = iTemp; 
i++; 
j--; 
} 
}while(i<=j);//如果兩邊掃描的下標交錯,就停止(完成一次) 

//當左邊部分有值(left<j),遞歸左半邊 
if(left<j) 
run(pData,left,j); 
//當右邊部分有值(right>i),遞歸右半邊 
if(right>i) 
run(pData,i,right); 
} 

template <class T> 
void QuickSort(T* pData,int Count) 
{ 
run(pData,0,Count-1); 
} 

void main() 
{ 
CMyData data[] = { 
CMyData(8,"xulion"), 
CMyData(7,"sanzoo"), 
CMyData(6,"wangjun"), 
CMyData(5,"VCKBASE"), 
CMyData(4,"jacky2000"), 
CMyData(3,"cwally"), 
CMyData(2,"VCUSER"), 
CMyData(1,"isdong") 
}; 
QuickSort(data,8); 
for (int i=0;i<8;i++) 
cout<<data[i].m_iIndex<<" "<<data[i].GetData()<<"\n"; 
cout<<"\n"; 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合婷婷国产精品久久| 欧美日韩大陆在线| 91首页免费视频| 日韩视频在线观看一区二区| 国产精品网站在线观看| 日韩黄色小视频| 97se亚洲国产综合自在线不卡| 日韩欧美一区在线观看| 亚洲欧美一区二区三区孕妇| 精品在线观看视频| 欧美日韩激情一区二区| 亚洲视频免费在线观看| 国产成人综合自拍| 日韩美女一区二区三区四区| 亚洲午夜久久久| 色香色香欲天天天影视综合网| 久久新电视剧免费观看| 日日摸夜夜添夜夜添亚洲女人| 91在线视频免费91| 中文字幕精品三区| 国产激情视频一区二区三区欧美 | 日韩一二三四区| 亚洲免费在线视频一区 二区| 经典三级在线一区| 日韩在线一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 国产69精品久久久久毛片| 精品少妇一区二区三区| 日本成人在线看| 欧美日韩一区视频| 一区二区三区产品免费精品久久75 | 肉丝袜脚交视频一区二区| 色婷婷精品大在线视频| 国产精品日产欧美久久久久| 国产精品中文欧美| 久久久不卡网国产精品二区| 国产乱码精品一区二区三| 精品福利av导航| 久草在线在线精品观看| 久久综合丝袜日本网| 国产乱人伦偷精品视频免下载| 2023国产精品| 国产91丝袜在线播放| 欧美激情一区二区三区全黄| 国产成人福利片| 中文字幕综合网| 色哟哟国产精品| 日日噜噜夜夜狠狠视频欧美人| 欧美丰满少妇xxxxx高潮对白| 日本美女一区二区| 欧美精品一区二区精品网| 国产成人亚洲综合a∨猫咪| 国产精品久久久久久久岛一牛影视 | 日韩精品1区2区3区| 7777精品伊人久久久大香线蕉经典版下载 | 亚洲精品乱码久久久久久黑人 | 欧美精品一区二区蜜臀亚洲| 粉嫩绯色av一区二区在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产福利视频一区二区三区| 中文在线免费一区三区高中清不卡| 高清不卡在线观看| 亚洲午夜激情av| 精品国产乱码久久久久久图片| 国产成人在线视频网站| 亚洲激情五月婷婷| 欧美tickling挠脚心丨vk| 国产jizzjizz一区二区| 一区二区国产盗摄色噜噜| 这里是久久伊人| 成人99免费视频| 日日夜夜一区二区| 国产精品福利一区二区| 在线不卡a资源高清| 国产高清久久久| 丝瓜av网站精品一区二区| 亚洲国产成人一区二区三区| 欧美日韩中字一区| 成人免费视频一区| 日韩av不卡一区二区| 国产精品久久久久久久久免费丝袜| 欧美日本一道本在线视频| 丁香六月综合激情| 日本亚洲视频在线| 伊人开心综合网| 国产色91在线| 日韩精品一区二区在线| 欧美四级电影网| jizzjizzjizz欧美| 精品无码三级在线观看视频| 亚洲国产欧美在线| 亚洲四区在线观看| 国产欧美精品一区aⅴ影院| 宅男在线国产精品| 91精品福利在线| 成人18视频日本| 国产黄色精品视频| 国产一区二区三区电影在线观看| 亚洲资源在线观看| 亚洲视频资源在线| 国产精品夫妻自拍| 国产精品免费aⅴ片在线观看| www精品美女久久久tv| 91麻豆精品国产综合久久久久久| 色94色欧美sute亚洲线路二| 国产精品一卡二卡| 国产一区二区在线观看视频| 日韩电影一区二区三区| 亚洲成人你懂的| 亚洲五码中文字幕| 亚洲精品免费电影| 夜色激情一区二区| 一区二区三区在线影院| 亚洲丝袜精品丝袜在线| 亚洲婷婷国产精品电影人久久| 国产精品久久久久久久久免费相片| 国产亚洲精品免费| 26uuu国产日韩综合| 久久久久久久久久久久久久久99| 欧美电影免费观看高清完整版 | 国产日本一区二区| 久久久99久久| 国产精品区一区二区三| 成人欧美一区二区三区黑人麻豆| 亚洲色图制服丝袜| 狠狠色综合日日| 三级亚洲高清视频| 久久超碰97中文字幕| 经典一区二区三区| 高清国产一区二区| 99国产精品国产精品久久| 在线观看中文字幕不卡| 欧美日韩国产一区| 精品久久人人做人人爰| 欧美国产丝袜视频| 亚洲色图清纯唯美| 亚洲成人激情av| 久久精品99国产国产精| 国产大片一区二区| 在线视频欧美精品| 91精品国产综合久久久久久久久久| 日韩一区二区电影网| 国产视频视频一区| 亚洲一区二区四区蜜桃| 日韩av电影天堂| 成人美女视频在线观看| 欧洲国产伦久久久久久久| 日韩三级高清在线| 国产精品网站导航| 日韩精品福利网| av不卡在线播放| 日韩一区二区免费视频| 国产精品久久久久久久久晋中 | 在线精品观看国产| 欧美zozozo| 依依成人综合视频| 久久精品av麻豆的观看方式| 99riav一区二区三区| 欧美一区二区三区视频免费| 国产精品久久久久久久久免费桃花| 午夜久久久久久久久| 国产福利一区在线| 91麻豆精品国产91久久久久 | 樱花影视一区二区| 国产精品一色哟哟哟| 欧美日韩在线一区二区| 国产欧美日韩精品a在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 极品少妇xxxx精品少妇| 欧美午夜电影在线播放| 国产精品天干天干在观线| 婷婷成人激情在线网| 成人av免费在线观看| 精品国产三级电影在线观看| 亚洲综合一区二区精品导航| 国产成人精品亚洲777人妖| 欧美久久一二三四区| 亚洲欧美日韩一区二区| 国产精品一区二区无线| 欧美一区二区三区思思人| 亚洲国产精品欧美一二99| 99久久99久久精品国产片果冻| www国产成人| 麻豆国产欧美一区二区三区| 在线不卡免费av| 亚洲高清免费一级二级三级| 91免费版pro下载短视频| 欧美国产丝袜视频| 风流少妇一区二区| 国产亚洲欧美中文| 国产成人啪午夜精品网站男同| 日韩欧美国产成人一区二区| 天天综合网 天天综合色| 91黄视频在线| 亚洲精品久久7777| 91在线视频观看| 亚洲精品国久久99热| 色一情一伦一子一伦一区| 亚洲美女屁股眼交| 欧美在线观看你懂的|