資料結構實驗報告六(排序實踐)
我是qq
資料結構與演算法課程實驗報告
實驗六:排序實踐
姓名:
班級:
學號:
實驗六排序實踐
一.實驗內容:
實現各排序演算法,必須實現起泡排序、希爾排序和簡單選擇排序,其他排序演算法選做,並分析各演算法的效能。
二.實驗目的:
掌握各排序演算法的實現方法,並分析各排序演算法的時間和空間效能。
三:問題描述:
希爾排序:在每趟排序前,先設定乙個增量,將整個待排記錄序列逐段分割成若干個子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
起泡排序:第一趟起泡排序是將第乙個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則將兩個記錄交換,然後比較第二個記錄和第三個記錄的關鍵字。以此類推,直到將第
n-1個記錄和第
n個記錄的關鍵字進行比較過為止。再進行第二趟起泡排序,直到在一趟排序過程中沒有進行過交換記錄的操作為止。
簡單選擇排序:通過
n-i次關鍵字間的比較,從
n-i+1
個記錄中選擇出關鍵字最小的記錄,並和第i(
1<=i<=n
)個記錄交換。
四:問題實現:
1.定義了兩個資料結構,記錄型別和順序表型別。
typedef struct
redtype;
//記錄型別
typedef struct
sqlist;
//順序表型別。
2.主要實現思路:將待排序的序列存放在順序表裡,再進行相應的排序,每個排序都有初始關鍵字、每趟排序結果、最終排序結果的顯示。
希爾排序:要自定義排序的趟數和每趟排序的增量,增量存放在乙個陣列裡。主要是通過比較關鍵字的大小,記錄後移,找到插入位置,然後插入。
起泡排序:設定了乙個標記
flag;
用於標記排序是否結束,
flag=1
繼續,flag=0
結束。主要是通過兩兩比較,每次都選出乙個無序區里最大的關鍵字,直到全部有序為止。
簡單選擇排序:定義了乙個函式
selectminkey(sqlist &l,int i)
返回key
最小的記錄的下標。主要是選擇關鍵字最小的記錄的操作。
五:主要源程式**(包含程式備註)
1.順序表的初始化
sqlist initsqlist(sqlist &l)
2.順序表的建立
sqlist createsqlist(sqlist &l)
return l;
}3.定義selectminkey(sqlist &l,int i)函式,返回key最小的記錄的下標。
int selectminkey(sqlist &l,int i)
return v;
}4.簡單選擇排序的實現
void selectsort(sqlist &l)//
對順序表
l作簡單選擇排序
count++;
cout《趟排序結果:";
for(int j2=1;j2} }
5.起泡排序的實現
void bubblesort(sqlist &l)
} m--;
count++;
cout《趟排序結果:";
for(int j2=1;j2} }
6.一趟希爾排序的實現
void shellinsert(sqlist &l,int d) // l.r[0]
是暫存單元,不是哨兵。
j<=0
時,插入位置已找到
l.r[j+d]=l.r[0];
//插入位置已找到,插入} }
}7. t趟希爾排序的實現
void shellsort(sqlist &l)
while(dk[t-1]!=1)
cout<<"
初始關鍵字:";
for(int j1=1;j1
for(int k=0;k
}8.主程式
void main()
cout《排序後:
"<
for(int i=1;i
dowhile(n!=1&&n!=2);
}while(n==1);
}
六:總結
在設計希爾排序的增量時,存在一些問題。我設計的是讓使用者自己定義要排序的趟數,和每趟排序的增量,並且設定了最後一趟增量必須為
1,但其他沒有強制設定。
資料結構 實驗六 排序
本次實驗實現排序中的直接插入 氣泡排序 快速排序 簡單選擇排序 堆排序等排序演算法。下面放一下自己的 include include include datahead.h define maxsize 20typedef intkeytype typedef struct redtype typed...
實驗六 排序綜合
氣泡排序 1 定義順序表的儲存結構 2 在順序表上實現氣泡排序 3 將普通的氣泡排序進行多次改進以提高排序速度,並用大量資料測試其速度的提高。快速排序 1 定義順序表的儲存結構 2 在順序表上實現快速排序 3 用大量的資料測試最好 最壞和平均情況下的排序速度。堆排序 1 定義順序表的儲存結構 2 在...
資料結構實驗報告 資料結構實驗報告
使用c語言中的陣列,實現線性表中的順序結構儲存的查詢 刪除操作。1 初始線性表通過陣列 迴圈 scanf語句實現輸入任意個整數。2 刪除操作的實現,任意輸入乙個要刪除的整數,找到這個元素,將此元素之後的所有元素逐個前移一位,實現刪除操作。3 要求以上2步操作可以重複執行。4 例如 刪除操作執行結果大...