直接插入排序、直接選擇排序、堆排序、快速排序、冒泡排序的實(shí)驗(yàn)_第1頁
直接插入排序、直接選擇排序、堆排序、快速排序、冒泡排序的實(shí)驗(yàn)_第2頁
直接插入排序、直接選擇排序、堆排序、快速排序、冒泡排序的實(shí)驗(yàn)_第3頁
直接插入排序、直接選擇排序、堆排序、快速排序、冒泡排序的實(shí)驗(yàn)_第4頁
直接插入排序、直接選擇排序、堆排序、快速排序、冒泡排序的實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、XXX大學(xué)實(shí)驗(yàn)報(bào)告學(xué)院:計(jì)算計(jì)科學(xué)與信息學(xué)院 專業(yè):數(shù)字媒體技術(shù) 班級:數(shù)媒091姓名學(xué)號實(shí)驗(yàn)組實(shí)驗(yàn)時(shí)間指導(dǎo)教師成績實(shí)驗(yàn)項(xiàng)目名稱實(shí)驗(yàn)?zāi)康?熟練掌握順序表和有序表的查找方法。2熟悉靜態(tài)查找樹的構(gòu)造方法和查找算法,熟練掌握二叉排序樹的構(gòu)造方法和查找算法。3掌握描述查找過程的判定樹的構(gòu)造方法,掌握各種查找方法在等概率情況下查找成功時(shí)的平均查找長度。 實(shí)驗(yàn)要求1了解散列表的構(gòu)造和查找算法。 2了解各種排序方法的執(zhí)行過程及其所依據(jù)的原則,掌握各種排序方法時(shí)間復(fù)雜度的分析方法。3熟練掌握希爾排序、快速排序、堆排序等高效排序算法。實(shí)驗(yàn)原理在visual c+編程環(huán)境中編寫程序源代碼,并編譯、運(yùn)行程序結(jié)果實(shí)驗(yàn)

2、儀器奔騰2計(jì)算機(jī)或以上機(jī)型、visual c+編程環(huán)境實(shí)驗(yàn)步驟1、 確定數(shù)據(jù)的結(jié)構(gòu)2、 編寫頭文件、函數(shù)及變量聲明3、 設(shè)計(jì)子函數(shù)4、 寫主函數(shù),并調(diào)用子函數(shù)5、 調(diào)試編寫好的程序6、 編譯正確后,運(yùn)行,觀察分析結(jié)果實(shí)驗(yàn)內(nèi)容程序1 內(nèi)部排序算法比較問題描述編寫常用的排序算法,并編寫主程序測試?;疽螅?)對以下常用的6種排序算法進(jìn)行比較:直接插入排序、直接選擇排序、堆排序、快速排序、冒泡排序。(2)待排序表的表長不小于100;其中的數(shù)據(jù)用自行設(shè)計(jì)。(3)對結(jié)果作出分析。直接插入排序void InsertSort ( ElemType A, int n int i, j;ElemType x;

3、for ( i=1; i 進(jìn)行 n-1 次插入 x = Ai; /準(zhǔn)備插入第i個(gè)元素 for ( j=i-1; j>=0; j- /從第i-1個(gè)開始往前找插入點(diǎn)if ( x.stn < Aj.stn Aj+1=Aj;else break; Aj+1=x; /插入直接選擇排序void SelectSort(ElemType A, int nint i, j, k;ElemType x;for ( i=0; i<=n-2; i+ /每一趟選擇最小元素并與Ai交換k=i; for (j=i+1; j<=n-1; j+ /查找最小元素的下標(biāo)if (Aj.stn if (k!=i

4、 /交換 x=Ai; Ai=Ak; Ak=x; 堆排序void CreatHeap(ElemType A, int nint i; for( i = (n2/2; i >= 0; i-Sift(A, n, i; /調(diào)整Ai.n-1使之為一個(gè)堆void Sift(ElemType A, int n, int i / 調(diào)整Ai.n-1成為一個(gè)堆(它的左右子樹已是一個(gè)堆)ElemType x=Ai; int j = 2 * i + 1; / j為i的左孩子 while (j <= n-1 / i有左子樹if ( j +1 < n && Aj.st

5、n < Aj+1.stn j+; / 使j指向左右孩子中排序碼大的孩子if ( x.stn < Aj.stn /將Aj上移,以便向下篩Ai=Aj; i=j; j=2*i+1; else break;Ai=x; void HeapSort(ElemType A, int n /A為待排序表, n為表的長度int i;ElemType x;  CreatHeap(A, n; / 把A建成一個(gè)堆for (i = n - 1; i >= 1; i- - x = A0; /第0個(gè)元素與第i個(gè)元素交換A0 = Ai;Ai = x; Sift(A, i, 0; /調(diào)整A0.i-1

6、使之為一個(gè)堆 冒泡排序void BubbleSort( ElemType A, int n int i, j, flag; /flag為交換標(biāo)記ElemType x;for (i=1; i<=n-1; i+ / 最多n-1趟排序flag=0; /假設(shè)本次沒有交換for (j=n-1; j>=i; j- /第i 趟if ( Aj.stn < Aj-1.stn flag=1; /出現(xiàn)交換x=Aj; Aj=Aj-1; Aj-1=x; if (flag=0 return;快速排序void QuickSort(ElemType A , int s, int t /遞歸算法,對區(qū)間 As

7、 At 進(jìn)行快速排序int i=s+1, j=t;ElemType temp, x = As; /第一個(gè)為基準(zhǔn)元素while ( i<=j while ( i<=j && Ai.stn <= x.stn i+; /從左到右while ( i<=j && Aj.stn >= x.stn j-; /從右到左 if ( i < j temp=Ai; Ai=Aj; Aj=temp; i+; j-;if (s!=j /交換基準(zhǔn)元素As=Aj; Aj=x; if (s 處理左區(qū)間 if (j+1 處理右區(qū)間 實(shí)驗(yàn)數(shù)據(jù)#include us

8、ing namespace std;typedef int ElemType;/直接插入排序void InsertSort ( ElemType A, int n int i, j;ElemType x;for ( i=1; i / 進(jìn)行 n-1 次插入 x = Ai; /準(zhǔn)備插入第i個(gè)元素 for ( j=i-1; j>=0; j- /從第i-1個(gè)開始往前找插入點(diǎn)if ( x< Aj Aj+1=Aj;else break; Aj+1=x; /插入/直接選擇排序void SelectSort(ElemType A, int nint i, j, k;ElemType x;for (

9、 i=0; i<=n-2; i+ /每一趟選擇最小元素并與Ai交換k=i; for (j=i+1; j<=n-1; j+ /查找最小元素的下標(biāo)if (Aj if (k!=i /交換 x=Ai; Ai=Ak; Ak=x; /堆排序void Sift(ElemType A, int n, int i;void CreatHeap(ElemType A, int nint i; for( i = (n-2/2; i >= 0; i-Sift(A, n, i; /調(diào)整Ai.n-1使之為一個(gè)堆void Sift(ElemType A, int n, int i / 調(diào)整Ai.n-1成為

10、一個(gè)堆(它的左右子樹已是一個(gè)堆)ElemType x=Ai; int j = 2 * i + 1; / j為i的左孩子while (j <= n-1 / i有左子樹if ( j +1 < n && Aj< Aj+1j+; / 使j指向左右孩子中排序碼大的孩子if ( x< Aj /將Aj上移,以便向下篩Ai=Aj; i=j; j=2*i+1; else break;Ai=x; void HeapSort(ElemType A, int n /A為待排序表,n為表的長度int i;ElemType x; CreatHeap(A, n; / 把A建成一個(gè)堆f

11、or(i=n-1;i>=1;i-x = A0; /第個(gè)元素與第i個(gè)元素交換A0 = Ai;Ai = x; Sift(A, i, 0; /調(diào)整A0.i-1使之為一個(gè)堆 /冒泡排序void BubbleSort( ElemType A, int n int i, j, flag; /flag為交換標(biāo)記ElemType x;for (i=1; i<=n-1; i+ / 最多n-1趟排序flag=0; /假設(shè)本次沒有交換for (j=n-1; j>=i; j- /第i 趟if ( Aj< Aj-1 flag=1; /出現(xiàn)交換x=Aj; Aj=Aj-1; Aj-1=x; if (

12、flag=0 return;/快速排序void QuickSort(ElemType A, int s, int t /遞歸算法,對區(qū)間As At 進(jìn)行快速排序int i=s+1, j=t;ElemType temp, x = As; /第一個(gè)為基準(zhǔn)元素while ( i<=j while ( i<=j && Ai<= x i+; /從左到右while ( i<=j && Aj>=x j-; /從右到左 if ( i < j temp=Ai; Ai=Aj; Aj=temp; i+; j-;if (s!=j /交換基準(zhǔn)元素As=

13、Aj; Aj=x;if (s / 處理左區(qū)間 if (j+1 / 處理右區(qū)間 void main(int i,j,n,N=5;cout<<"請輸入個(gè)整數(shù):" ElemType A5;for(j=0;j cin>>Aj;cout<<"排序前為:"< for(i=0;i cout< cout<<"直接插入排序:"< InsertSort (A, N ;for(i=0;i cout< 運(yùn) /運(yùn)行結(jié)果如右;cout<<"直接選擇排序:"< SelectSort(A, N;for(i=0;i cout< cout<<"堆排序:"< HeapSort(A, N;f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論