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

aurain
技術文摘
posts - 137,  comments - 268,  trackbacks - 0

排序算法是數據結構學科經典的內容,其中內部排序現有的算法有很多種,究竟各有什么特點呢?本文力圖設計實現常用內部排序算法并進行比較。分別為起泡排序,直接插入排序,簡單選擇排序,快速排序,堆排序,針對關鍵字的比較次數和移動次數進行測試比較.

問題分析和總體設計

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

待排序表的元素的關鍵字為整數.用正序,逆序和不同亂序程度的不同數據做測試比較,
對關鍵字的比較次數和移動次數(關鍵字交換計為3次移動)進行測試比較.
要求顯示提示信息,用戶由鍵盤輸入待排序表的表長(100-1000)和不同測試數據的組數(8-18).每次測試完畢,要求列表現是比較結果.
要求對結果進行分析.

詳細設計
1、起泡排序
算法:核心思想是掃描數據清單,尋找出現亂序的兩個相鄰的項目。當找到這兩個項目后,交換項目的位置然后繼續掃描。重復上面的操作直到所有的項目都按順序排好

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、直接插入排序
算法:經過i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當位置,使得L[1..i]又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較L[i]和L[i-1],如果L[i-1]≤ L[i],則L[1..i]已排好序,第i遍處理就結束了;否則交換L[i]與L[i-1]的位置,繼續比較L[i-1]和L[i-2],直到找到某一個位置j(1≤j≤i-1),使得L[j] ≤L[j+1]時為止

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、簡單選擇排序
算法:首先找到數據清單中的最小的數據,然后將這個數據同第一個數據交換位置;接下來找第二小的數據,再將其同第二個數據交換位置,以此類推。

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、快速排序
算法:首先檢查數據列表中的數據數,如果小于兩個,則直接退出程序。如果有超過兩個以上的數據,就選擇一個分割點將數據分成兩個部分,小于分割點的數據放在一組,其余的放在另一組,然后分別對兩組數據排序。
通常分割點的數據是隨機選取的。這樣無論你的數據是否已被排列過,你所分割成的兩個字列表的大小是差不多的。而只要兩個子列表的大小差不多


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) 基本思想:
堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系來選擇最小的元素。
(2) . 堆的定義: N個元素的序列K1,K2,K3,...,Kn.稱為堆,當且僅當該序列滿足特性:
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;
}
}


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

posted on 2008-06-12 11:03 閱讀(3336) 評論(0)  編輯 收藏 引用 所屬分類: 算法與數據結構

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(17)

隨筆分類(138)

隨筆檔案(137)

網絡開發

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 502444
  • 排名 - 37

最新隨筆

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产自产精品| 日韩一级视频免费观看在线| 亚洲欧美国产高清va在线播| 日韩视频精品在线观看| 欧美视频中文字幕在线| 香蕉视频成人在线观看| 性久久久久久久| 狠狠入ady亚洲精品| 亚洲成色777777在线观看影院| 久热精品在线| 一本久道综合久久精品| 在线综合亚洲欧美在线视频| 国产精品永久入口久久久| 久久天天躁狠狠躁夜夜爽蜜月| 久久精品在这里| 99riav国产精品| 午夜一级久久| 亚洲精品国精品久久99热| 在线亚洲一区二区| 韩国在线一区| 日韩亚洲欧美一区二区三区| 国产视频一区二区三区在线观看| 久久亚洲高清| 欧美私人啪啪vps| 久久婷婷丁香| 欧美亚韩一区| 欧美成人免费在线| 国产精品亚洲综合天堂夜夜| 免费不卡在线观看| 国产精品视频自拍| 亚洲国产精品ⅴa在线观看| 国产精品你懂的在线欣赏| 欧美成人午夜影院| 国产精品丝袜白浆摸在线| 亚洲福利视频网站| 国产香蕉久久精品综合网| 亚洲片在线观看| 国产在线观看精品一区二区三区| 亚洲人成免费| 在线 亚洲欧美在线综合一区| 99国产精品99久久久久久| 亚洲高清精品中出| 亚洲欧美国产日韩天堂区| 夜夜狂射影院欧美极品| 久久久久一区二区三区四区| 亚洲欧美资源在线| 欧美日韩国产小视频在线观看| 久久久久久久综合狠狠综合| 国产精品久久久免费| 亚洲精品久久久久久久久久久| 一区二区亚洲精品| 性久久久久久久| 午夜精品久久一牛影视| 欧美激情视频一区二区三区免费 | 久久全球大尺度高清视频| 亚洲专区一区二区三区| 欧美—级a级欧美特级ar全黄| 麻豆9191精品国产| 韩国三级电影一区二区| 欧美亚洲视频在线观看| 亚洲欧美另类国产| 欧美午夜激情小视频| 99re6这里只有精品| 亚洲乱码一区二区| 欧美xart系列高清| 亚洲国产成人精品久久久国产成人一区| 国语精品中文字幕| 久久精品国产99| 久热精品在线| 亚洲国产精品一区| 美女亚洲精品| 亚洲级视频在线观看免费1级| 亚洲国产婷婷香蕉久久久久久99| 久久亚洲一区二区| 亚洲国产日韩欧美在线动漫| 亚洲精品日本| 欧美日韩一区二区三区四区在线观看 | 羞羞漫画18久久大片| 国产精品视频福利| 欧美一区二区三区视频免费播放 | 午夜一区二区三区在线观看| 国产精品久在线观看| 亚洲欧美成人在线| 久久在线视频| 亚洲国产精品久久久久| 欧美精品日韩www.p站| 一本色道久久综合一区| 欧美一级久久久| 亚洲电影第1页| 欧美精品在线一区二区三区| 亚洲图片欧洲图片av| 欧美专区在线观看| 91久久国产精品91久久性色| 欧美区在线观看| 亚洲欧美在线观看| 欧美福利专区| 亚洲欧美成人综合| 亚洲国产精品久久久| 国产精品国产亚洲精品看不卡15 | 亚洲一区在线观看视频 | 亚洲国产婷婷香蕉久久久久久| 日韩视频在线你懂得| 国产精品一区视频| 欧美大香线蕉线伊人久久国产精品| 亚洲精品乱码久久久久久蜜桃91| 翔田千里一区二区| 亚洲美女黄色| 国产一在线精品一区在线观看| 欧美成人激情视频免费观看| 亚洲天堂视频在线观看| 欧美激情国产日韩| 欧美一区二区三区在线视频 | 国产模特精品视频久久久久| 欧美成ee人免费视频| 欧美亚洲三区| 99亚洲精品| 亚洲国产精品日韩| 久久久亚洲欧洲日产国码αv| 夜夜夜久久久| 亚洲高清免费| 国产一区二区欧美日韩| 欧美三级午夜理伦三级中文幕| 久久久国产一区二区| 午夜精品一区二区在线观看| 日韩午夜免费视频| 亚洲激情视频在线观看| 狂野欧美激情性xxxx欧美| 欧美一区二区| 亚洲欧美日韩国产另类专区| 亚洲精品中文字幕女同| 亚洲国产精品嫩草影院| 国产亚洲亚洲| 国产日韩欧美精品在线| 国产精品美女久久久久久久| 欧美日韩视频一区二区三区| 欧美.com| 欧美激情一二区| 你懂的国产精品永久在线| 狼狼综合久久久久综合网| 久久精品亚洲一区| 久久国产福利| 久久久一区二区| 久久尤物视频| 久久全国免费视频| 免播放器亚洲| 欧美精品久久久久久久久老牛影院| 久久婷婷人人澡人人喊人人爽| 久久超碰97人人做人人爱| 久久爱91午夜羞羞| 久久精品视频免费| 久久综合激情| 欧美黄色aaaa| 欧美特黄视频| 国产欧美日韩精品专区| 国产一区二区三区黄视频| 红桃av永久久久| 亚洲韩国精品一区| 夜色激情一区二区| 亚洲欧美电影在线观看| 久久精品国产第一区二区三区| 久久精品1区| 久久夜色精品国产欧美乱极品| 久久综合99re88久久爱| 欧美激情网友自拍| 一区二区三区欧美成人| 午夜精品一区二区在线观看 | 国产精品99久久久久久人| 亚洲午夜电影| 欧美在线高清视频| 女同性一区二区三区人了人一| 欧美va天堂| 国产精品欧美久久久久无广告| 国内精品久久久久久久果冻传媒| 在线成人中文字幕| 亚洲视频欧美在线| 久久精品日韩欧美| 亚洲国产三级在线| 亚洲在线视频一区| 蜜臀av性久久久久蜜臀aⅴ| 欧美三级电影大全| 尤物在线观看一区| 亚洲永久在线观看| 欧美va亚洲va日韩∨a综合色| 一区二区日韩精品| 久久人人97超碰国产公开结果| 欧美日韩美女一区二区| 精品动漫3d一区二区三区免费 | 国产精品五月天| 91久久黄色| 久久久久久91香蕉国产| 亚洲免费大片| 麻豆精品传媒视频| 国产欧美视频一区二区| 99精品热视频| 免费在线欧美黄色| 翔田千里一区二区| 欧美午夜在线观看| 日韩视频一区二区三区在线播放免费观看| 欧美一区二区视频在线观看| 亚洲乱码国产乱码精品精 |