狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

《數據結構》實驗報告——排序

| 瀏覽次數:

 《數據結構》實驗報告

  排序 實驗題目:

 輸入十個數,從插入排序,快速排序,選擇排序三類算法中各選一種編程實現。

 實驗所使用得數據結構內容及編程思路:

 1、插入排序:直接插入排序得基本操作就是,將一個記錄到已排好序得有序表中,從而得到一個新得,記錄增一得有序表。

 一般情況下,第 i 趟直接插入排序得操作為:在含有i—1 個記錄得有序子序列r[1、、i-1]中插入一個記錄 r[i]后,變成含有 i 個記錄得有序子序列r[1、、i];并且,與順序查找類似,為了在查找插入位置得過程中避免數組下標出界,在 r[0]處設置哨兵。在自 i-1 起往前搜索得過程中,可以同時后移記錄.整個排序過程為進行 n—1 趟插入,即:先將序列中得第一個記錄瞧成就是一個有序得子序列,然后從第 2 個記錄起逐個進行插入,直至整個序列變成按關鍵字非遞減有序序列為止。

 2、快速排序:基本思想就是,通過一趟排序將待排記錄分割成獨立得兩部分,其中一部分記錄得關鍵字均比另一部分記錄得關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

 假設待排序得序列為{L、r[s],L、r[s+1],…L、r[t]},首先任意選取一個記錄(通常可選第一個記錄 L、r[s])作為樞軸(或支點)(pivot),然后按下述原則重新排列其余記錄:將所有關鍵字較它小得記錄都安置在它得位置之前,將所有關鍵字較大得記錄都安置在它得位置之后。由此可以該“樞軸”記錄最后所羅得位置 i 作為界線,將序列{L、r[s],…,L、r[t]}分割成兩個子序列{L、r[i+1],L、[i+2],…,L、r[t]}。這個過程稱為一趟快速排序,或一次劃分。

 一趟快速排序得具體做法就是:附設兩個指針 low與high,她們得初值分別為low與high,設樞軸記錄得關鍵字為pivotkey,則首先從high所指位置起

 向前搜索找到第一個關鍵字小于 pivotkey 得記錄與樞軸記錄互相交換,然后從low所指位置起向后搜索,找到第一個關鍵字大于pivotkey得記錄與樞軸記錄互相交換,重復這兩不直至 low=high 為止。

 具體實現上述算法就是,每交換一對記錄需進行 3 次記錄移動(賦值)得操作。而實際上,在排列過程中對樞軸記錄得賦值就是多余得,因為只有在一趟排序結束時,即 low=high 得位置才就是樞軸記錄得最后位置。由此可以先將樞軸記錄暫存在 r[0]得位置上,排序過程中只作 r[low]或r[high]得單向移動,直至一趟排序結束后再將樞軸記錄移至正確位置上. 整個快速排序得過程可遞歸進行。若待排序列中只有一個記錄,顯然已有序,否則進行一趟快速排序后再分別對分割所得得兩個子序列進行快速排序. 3、簡單選擇排序:其操作為,通過 n-i 次關鍵字間得比較,從 n—i+1 個記錄中選出關鍵字最小得記錄,并與第 i(1≤i≤n)個記錄交換之。

 顯然,對 L、r[1…n]中得記錄進行簡單選擇排序得算法為:令i從1至 n—1,進行 n—1 趟選擇操作.可以瞧出,簡單選擇排序過程中,所需進行記錄移動得操作次數較少,其最小值為“0",最大值為 3(n-1)。然后,無論記錄得初始排列如何,所需進行得關鍵字之間得比較次數相同,均為 n(n—1)/2。

 程序清單:

 1.插入排序:

 #include〈stdio、h〉 struct sqlist {int key[11];

 int length; } insertsort(struct sqlist *l) { int i,j;

 for(i=2;i〈=l—>length;i++)

  if(l-〉key[i]〈l->key[i-1])

 {l->key[0]=l-〉key[i];

  l->key[i]=l-〉key[i-1];

 for(j=i-2;l—>key[0]<l—>key[j];j--)

 l—〉key[j+1]=l—>key[j];

 l—>key[j+1]=l—>key[0];

 } } main()

 { int i,j,k; struct sqlist num; num、length=10; for(i=1;i<=num、length;i++)scanf(”%d",&(num、key[i])); insertsort(&num); printf(“charu:”); for(i=1;i<=num、length;i++)printf (”%d ",num、key[i]); } 測試用例:

 輸入:23 34 12 98 56 45 67 8 9 37

  輸出:charu:8 9 12 23 34 37 45 56 67 98 2 快速排序:

 #include<stdio、h> struct sqlist { int key[11]; int length; }; int partition(struct sqlist *l,int low,int high) { int pivotkey; l->key[0]=l-〉key[low]; pivotkey=l->key[low]; while(low<high)

 {while(low<high&&l-〉key[high]〉=pivotkey)high--;

  l->key[low]=l->key[high];

 while(low<high&&l->key[low]<=pivotkey)low++;

 l-〉key[high]=l—>key[low]; } l->key[low]=l—>key[0]; return low; } void qsort(struct sqlist *l,int low,int high) {int pivotloc;

 if(low<high)

 {pivotloc=partition(l,low,high);

  qsort(l,low,pivotloc—1);

  qsort(l,pivotloc+1,high);

 } } void quicksort(struct sqlist *l) { qsort(l,1,l->length); } main()

 { int i,j; struct sqlist num; num、length=10; for(i=1;i<=num、length;i++)scanf(”%d",&(num、key[i])); quicksort(&num); printf(“kuaisu:”); for(i=1;i〈=num、length;i++)printf("%d ",num、key[i]); } 測試用例: 輸入:23 34 12 98 56 45 67 8 9 37

  輸出:charu:8 9 12 23 34 37 45 56 67 98 3選擇排序:

 #include<stdio、h> struct sqlist {int key[11];

 int length; }; int selectminkey(struct sqlist *l,int a) { int i,j=a; for(i=a;i〈=l->length;i++)

 if(l—>key[i]<l->key[j])j=i;

  return j; } void selectsort (struct sqlist *l)

 {int i,j,k;

 for(i=1;i<l—>length;i++)

 {j=selectminkey(l,i);

  if(i!=j){k=l->key[i];

 l-〉key[i]=l->key[j];

 l—〉key[j]=k;}

 } } main()

 { int i,j; struct sqlist num; num、length=10; for(i=1;i〈=num、length;i++)scanf("%d”,&(num、key[i])); selectsort(&num); printf(“xuanze:”); for(i=1;i<=num、length;i++)printf(”%d ”,num、key[i]); } 測試用例:

 輸入:23 34 12 98 56 45 67 8 9 37

 輸出:charu:8 9 12 23 34 37 45 56 67 98 編程感想: 本次編程總共使用了三種排序方法,而這三種編程方法放在一起進行編寫時,很容易就讓我們對齊難易程度有了更深刻得了解。

 首先,三種排序中,我們都像查表那樣,設置了哨兵,而哨兵得使用可以減少對整個表得驗空操作,使程序更加節省空間。

 其次,對于插入排序,每次都要對一段序列進行檢索,每排一次所要檢索得序列長度減一,其時間發雜度為 O(n^2)。

 接著,對于快速排序,這個程序就是比較復雜得,總共就是3個函數,并且使用了遞歸得方法,這就是但就是,這種算法卻就是最優越得,平均性能也就是最好得,我在編這個程序時,對其排序得思想有了進一步得了解,并努力拿她與冒泡排序進行比較,瞧出了些許其優越性。

 還有,就就是選擇排序,簡單選擇排序思路簡單,易于進行,但其時間發雜度與簡單插入排序方法一樣,都就是O(n^2),性能不如快速排序. 最后,本次試驗就是數據結構課得最后一次實驗,經過數據結構試驗課得鍛煉,使我對數據結構有了更深刻得理解,對我對其知識起到了重要得影響,增加了我編程得實踐活動,為我將來進一步學習打下了基礎。

推薦訪問: 數據結構 排序 實驗

【《數據結構》實驗報告——排序】相關推薦

工作總結最新推薦

NEW