青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

aurain
技術(shù)文摘
posts - 137,  comments - 268,  trackbacks - 0

排序算法是數(shù)據(jù)結(jié)構(gòu)學(xué)科經(jīng)典的內(nèi)容,其中內(nèi)部排序現(xiàn)有的算法有很多種,究竟各有什么特點(diǎn)呢?本文力圖設(shè)計(jì)實(shí)現(xiàn)常用內(nèi)部排序算法并進(jìn)行比較。分別為起泡排序,直接插入排序,簡(jiǎn)單選擇排序,快速排序,堆排序,針對(duì)關(guān)鍵字的比較次數(shù)和移動(dòng)次數(shù)進(jìn)行測(cè)試比較.

問(wèn)題分析和總體設(shè)計(jì)

ADT OrderableList{
數(shù)據(jù)對(duì)象:D={ai| ai∈IntegerSet,i=1,2,…,n,n≥0}
數(shù)據(jù)關(guān)系:R1={〈ai-1,ai〉|ai-1, ai∈D, i=1,2,…,n}
基本操作:
InitList(n)
操作結(jié)果:構(gòu)造一個(gè)長(zhǎng)度為n,元素值依次為1,2,…,n的有序表。
Randomizel(d,isInverseOrser)
操作結(jié)果:隨機(jī)打亂
BubbleSort( )
操作結(jié)果:進(jìn)行起泡排序
InserSort( )
操作結(jié)果:進(jìn)行插入排序
SelectSort( )
操作結(jié)果:進(jìn)行選擇排序
QuickSort( )
操作結(jié)果:進(jìn)行快速排序
HeapSort( )
操作結(jié)果:進(jìn)行堆排序
ListTraverse(visit( ))
操作結(jié)果:依次對(duì)L種的每個(gè)元素調(diào)用函數(shù)visit( )
}ADT OrderableList

待排序表的元素的關(guān)鍵字為整數(shù).用正序,逆序和不同亂序程度的不同數(shù)據(jù)做測(cè)試比較,
對(duì)關(guān)鍵字的比較次數(shù)和移動(dòng)次數(shù)(關(guān)鍵字交換計(jì)為3次移動(dòng))進(jìn)行測(cè)試比較.
要求顯示提示信息,用戶由鍵盤(pán)輸入待排序表的表長(zhǎng)(100-1000)和不同測(cè)試數(shù)據(jù)的組數(shù)(8-18).每次測(cè)試完畢,要求列表現(xiàn)是比較結(jié)果.
要求對(duì)結(jié)果進(jìn)行分析.

詳細(xì)設(shè)計(jì)
1、起泡排序
算法:核心思想是掃描數(shù)據(jù)清單,尋找出現(xiàn)亂序的兩個(gè)相鄰的項(xiàng)目。當(dāng)找到這兩個(gè)項(xiàng)目后,交換項(xiàng)目的位置然后繼續(xù)掃描。重復(fù)上面的操作直到所有的項(xiàng)目都按順序排好

bubblesort(struct rec r[],int n)
{
int i,j;
struct rec w;
unsigned long int compare=0,move=0;
for(i=1;i<=n-1;i++)
for(j=n;j>=i+1;j--)
{
if(r[j].key<r[j-1].key)
{
w=r[j];
r[j]=r[j-1];
r[j-1]=w;
move=move+3;
}
compare++;
}
printf("
BubbleSort compare= %ld,move= %ld
",compare,move);
}


2、直接插入排序
算法:經(jīng)過(guò)i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當(dāng)位置,使得L[1..i]又是排好序的序列。要達(dá)到這個(gè)目的,我們可以用順序比較的方法。首先比較L[i]和L[i-1],如果L[i-1]≤ L[i],則L[1..i]已排好序,第i遍處理就結(jié)束了;否則交換L[i]與L[i-1]的位置,繼續(xù)比較L[i-1]和L[i-2],直到找到某一個(gè)位置j(1≤j≤i-1),使得L[j] ≤L[j+1]時(shí)為止

insertsort(struct rec r[],int n)
{
int i,j;
unsigned long int compare=0,move=0;
for(i=2;i<=n;i++)
{compare++;
r[0]=r[i];
move++;
j=i-1;
while(r[0].key {r[j+1]=r[j];
j--;
move++;
++compare;}
r[j+1]=r[0];
move++;
}
printf("
InsertSort compare= %ld,move= %ld
",compare,move);
}


3、簡(jiǎn)單選擇排序
算法:首先找到數(shù)據(jù)清單中的最小的數(shù)據(jù),然后將這個(gè)數(shù)據(jù)同第一個(gè)數(shù)據(jù)交換位置;接下來(lái)找第二小的數(shù)據(jù),再將其同第二個(gè)數(shù)據(jù)交換位置,以此類推。

selectsort(struct rec r[],int n)
{
unsigned long int compare=0,move=0;
int i,j,k;
struct rec w;
for(i=1;i<=n-1;i++)
{ k=i;
for(j=i+1;j<=n;j++)

{ if(r[j].key>r[k].key) {k=j; compare++; }
w=r[i];
r[i]=r[k];
r[k]=w;
move=move+3;

}
}
printf("
SelectSort compare= %ld,move= %ld
",compare,move);
}


4、快速排序
算法:首先檢查數(shù)據(jù)列表中的數(shù)據(jù)數(shù),如果小于兩個(gè),則直接退出程序。如果有超過(guò)兩個(gè)以上的數(shù)據(jù),就選擇一個(gè)分割點(diǎn)將數(shù)據(jù)分成兩個(gè)部分,小于分割點(diǎn)的數(shù)據(jù)放在一組,其余的放在另一組,然后分別對(duì)兩組數(shù)據(jù)排序。
通常分割點(diǎn)的數(shù)據(jù)是隨機(jī)選取的。這樣無(wú)論你的數(shù)據(jù)是否已被排列過(guò),你所分割成的兩個(gè)字列表的大小是差不多的。而只要兩個(gè)子列表的大小差不多


q(struct rec r[],int s,int t)
{
int i=s,j=t;
if(s<t)
{
r[0]=r[s]; ++a; c++;
do{
while(j>i&&r[j].key>=r[0].key)
{j--;
++a; }
if(i<j)
{ r[i]=r[j];
i++;
c++; }
while(i<j&&r[i].key<=r[0].key)
{i++;
++a; }
if(i<j)
{ r[j]=r[i];
j--;
c++; }
} while(i<j);
r[i]=r[0];
c++;
q(r,s,j-1);
q(r,j+1,t);
}
}


5. 堆排序
(1) 基本思想:
堆排序是一樹(shù)形選擇排序,在排序過(guò)程中,將R[1..N]看成是一顆完全二叉樹(shù)的順序存儲(chǔ)結(jié)構(gòu),利用完全二叉樹(shù)中雙親結(jié)點(diǎn)和孩子結(jié)點(diǎn)之間的內(nèi)在關(guān)系來(lái)選擇最小的元素。
(2) . 堆的定義: N個(gè)元素的序列K1,K2,K3,...,Kn.稱為堆,當(dāng)且僅當(dāng)該序列滿足特性:
Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])


sift(struct rec r[],int l,int m)
{
int i,j;
struct rec w;
i=l; j=2*i;
w=r[i];
while(j<=m)
{
if(j<m&&r[j].key<r[j+1].key) { j++;
}
if(w.key<r[j].key)
{
r[i]=r[j];
i=j;
j=2*i;
}
else j=m+1;
}
r[i]=w;
}

heapsort(struct rec r[],int n)
{
unsigned long int compare=-1,move=-1;
struct rec w;
int i;
int a;
for(i=n/2;i>=1;i--) a=sift(r,i,n);
compare++;
move++;

for(i=n;i>=2;i--)
{
w=r[i];
r[i]=r[1];
r[1]=w;
a=sift(r,1,i-1);
compare+=a;
move+=a;
}
}


小結(jié):
1.學(xué)會(huì)使用隨機(jī)函數(shù)randomize( ) 為數(shù)組賦初值要在頭文件中添加#include
2.在做此程序之前基本上是在理解了各種排序過(guò)程以后完成的
3.對(duì)排序算法的總結(jié):
(1)若n較小(如n≤50),可采用直接插入或直接選擇排序。
 當(dāng)記錄規(guī)模較小時(shí),直接插入排序較好;否則因?yàn)橹苯舆x擇移動(dòng)的記錄數(shù)少于直接插人,應(yīng)選直接選擇排序?yàn)橐恕?br>(2)若文件初始狀態(tài)基本有序(指正序),則應(yīng)選用直接插人、冒泡或隨機(jī)的快速排序?yàn)橐耍?br>(3)若n較大,則應(yīng)采用時(shí)間復(fù)雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并排序。
 快速排序是目前基于比較的內(nèi)部排序中被認(rèn)為是最好的方法,當(dāng)待排序的關(guān)鍵字是隨機(jī)分布時(shí),快速排序的平均時(shí)間最短;
 堆排序所需的輔助空間少于快速排序,并且不會(huì)出現(xiàn)快速排序可能出現(xiàn)的最壞情況。這兩種排序都是不穩(wěn)定的

posted on 2008-06-12 11:03 閱讀(3335) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 算法與數(shù)據(jù)結(jié)構(gòu)

<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(17)

隨筆分類(138)

隨筆檔案(137)

網(wǎng)絡(luò)開(kāi)發(fā)

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 501651
  • 排名 - 37

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            女人色偷偷aa久久天堂| 欧美在线三区| 欧美日韩成人| 黄色成人在线免费| 欧美一区二区在线免费观看| 一区二区国产在线观看| 欧美在线观看天堂一区二区三区 | 一区二区在线不卡| 久久精品九九| 另类春色校园亚洲| 日韩视频免费在线| 一区二区三区四区国产精品| 亚洲少妇诱惑| 国产一区二区三区电影在线观看| 亚洲欧美韩国| 久久久久久色| 欧美一区二区日韩| 欧美午夜美女看片| 久久久www成人免费无遮挡大片| 久久电影一区| 午夜免费久久久久| 欧美另类视频在线| 久久久久高清| 国产精品久久午夜夜伦鲁鲁| 久久综合成人精品亚洲另类欧美| 亚洲黑丝在线| 国产性猛交xxxx免费看久久| 亚洲精品黄网在线观看| 亚洲视频在线观看| 国产精品高潮久久| 亚洲电影天堂av| 亚洲嫩草精品久久| 亚洲视频欧美在线| 欧美激情精品久久久久久| 久久久天天操| 国产欧美精品日韩区二区麻豆天美| 国产亚洲精品aa午夜观看| 亚洲午夜极品| 欧美一级二级三级蜜桃| 国产精品美腿一区在线看 | 久久久久久一区二区三区| 欧美三级特黄| 亚洲视频二区| 麻豆成人精品| 91久久国产综合久久91精品网站| 久久精品网址| 99国产精品国产精品久久 | 夜夜嗨av色一区二区不卡| 久久精品2019中文字幕| 亚洲深夜激情| 亚洲国产毛片完整版| 欧美韩日一区| 亚洲一区尤物| 免费看亚洲片| 亚洲视频在线视频| 国产一区欧美日韩| 欧美h视频在线| 中国成人黄色视屏| 雨宫琴音一区二区在线| 欧美日韩国产片| 久久久国产午夜精品| 亚洲精品中文字| 欧美理论大片| 亚洲第一精品福利| 欧美性生交xxxxx久久久| 亚洲调教视频在线观看| 久久综合狠狠综合久久综青草 | 欧美激情一二区| 午夜精品福利在线观看| 国产精品久久毛片a| 久久综合九色99| 午夜精品区一区二区三| 亚洲精品欧美一区二区三区| 欧美在线视频日韩| 亚洲欧美一区二区激情| 一区二区三区视频在线| 亚洲精品综合精品自拍| 亚洲国产91| 欧美国产国产综合| 免费高清在线一区| 久久一二三国产| 久热精品在线| 亚洲国产精品视频一区| 国产主播在线一区| 狠狠色丁香久久综合频道| 国产欧美精品日韩| 日韩亚洲一区二区| 欧美一区二区三区视频免费播放| 亚洲一区国产一区| 午夜精品一区二区三区电影天堂 | 久久久久青草大香线综合精品| 亚洲欧美日本视频在线观看| 午夜久久电影网| 久久久av水蜜桃| 亚洲另类视频| 欧美激情久久久| 欧美三区视频| 极品中文字幕一区| 在线一区视频| 玖玖国产精品视频| 亚洲日本中文字幕区| 亚欧成人在线| 欧美黄色aaaa| 中日韩美女免费视频网址在线观看| 99精品黄色片免费大全| 先锋影音久久久| 欧美另类极品videosbest最新版本| 小黄鸭视频精品导航| 亚洲区在线播放| 最新69国产成人精品视频免费| 亚洲一区二区三区在线播放| 免费成人av资源网| 韩国女主播一区二区三区| 亚洲图片在线| 亚洲精品视频在线观看网站| 久久国产99| 国产专区一区| 久久综合一区| 老司机久久99久久精品播放免费| 亚洲视频在线观看三级| 欧美日本韩国一区| 亚洲另类在线视频| 久久亚洲一区二区| 国内精品久久久久国产盗摄免费观看完整版 | 久久国产精品黑丝| 国产三区二区一区久久| 性欧美大战久久久久久久免费观看| 亚洲欧洲日韩综合二区| 欧美成人免费全部| 在线视频亚洲一区| 亚洲美女视频| 99re国产精品| 国产日本精品| 蜜臀久久99精品久久久久久9| 久久精品中文字幕免费mv| 亚洲人成网站精品片在线观看| 亚洲国产精品久久久久婷婷884| 欧美成人精品三级在线观看| 欧美激情中文字幕一区二区| 日韩视频精品在线| 亚洲一区二区三区在线视频| 激情国产一区| 一区二区三区四区五区精品视频| 国产免费成人av| 亚洲韩日在线| 欧美中文字幕精品| 亚洲精品日韩一| 亚洲永久免费视频| 一本久道综合久久精品| 久久久久国产精品麻豆ai换脸| 一级成人国产| 久久久精品免费视频| 亚洲国产精品久久久久秋霞影院| 国产精品久久久久国产精品日日| 欧美国产日产韩国视频| 欧美日本在线播放| 久久一区二区三区国产精品| 在线播放豆国产99亚洲| 亚洲国产精品久久91精品| 狠狠入ady亚洲精品经典电影| 亚洲永久免费av| 久久精品一本久久99精品| 亚洲久色影视| 中文日韩欧美| 欧美性久久久| 中文在线一区| 欧美主播一区二区三区美女 久久精品人| 亚洲国产精品va在线看黑人| 亚洲综合色激情五月| 亚洲综合国产激情另类一区| 欧美日韩精品一本二本三本| 亚洲人成网站在线播| 日韩手机在线导航| 欧美三级日本三级少妇99| 亚洲美女性视频| 亚洲欧美日本国产有色| 国产午夜久久久久| 久久久久久久久久久一区 | 国产有码在线一区二区视频| 亚洲欧美制服另类日韩| 一区二区三区国产| 久久国产精品久久精品国产| 中文精品在线| 国产精品亚洲人在线观看| 性欧美在线看片a免费观看| 久久亚洲国产精品日日av夜夜| 亚洲激情视频在线播放| 国产精品99一区二区| 久久精品国产第一区二区三区| 噜噜噜在线观看免费视频日韩 | 亚洲精品乱码久久久久久日本蜜臀 | 香蕉久久a毛片| **欧美日韩vr在线| 国产伦理一区| 欧美日韩视频不卡| 久久久久综合网| 午夜久久一区| 在线一区欧美| 宅男在线国产精品| 亚洲理论在线|