十四希爾及快速排序

2022-12-12 10:42:05 字數 1923 閱讀 7055

一、實驗目的

熟悉希爾排序和快速排序的基本思想,掌握希爾排序和快速排序的操作過程及演算法實現。

二、實驗內容

輸入待排資料元素序列,然後用希爾排序和快速排序法對其進行排序。

三、實驗要點及說明

希爾排序是對直接插入排序的改進,其基本思想是:先將待排序記錄序列分割成若干個「較稀疏的」子串行,分別進行直接插入排序。經過上述粗略調整, 整個序列中的記錄已經基本有序,最後再對全部記錄進行一次直接插入排序。

具體實現時,首先選定兩個記錄間的距離d1,在整個待排序記錄序列中將所有間隔為d1的記錄分成一組,進行組內直接插入排序,然後再取兩個記錄間的距離d2快速排序是由氣泡排序改進而得的。基本思想是:在待排序的n個記錄中任取乙個記錄(通常取第乙個記錄),把該記錄放入適當位置後,資料序列被此記錄劃分成兩部分。

所有關鍵字比該記錄關鍵字小的記錄放置在前一部分,所有比它大的記錄放置在後一部分,並把該記錄排在這兩部分的中間(稱為該記錄歸位),這個過程稱作一趟快速排序。

程式**:

#include<>

#define maxe 20

typedef int keytype;

typedef char infortype[10];

typedef struct

rectype;

void shellsort (rectype r,int n)

printf(" d=%d: ",d);

for(k=0;kprintf("%3d",r[k].key);

printf("\n");

d=d/2;

}}void quicksort(rectype r,int s,int t)

r[i]=temp;

printf

for(k=0;k<10;k++)

if(k==i)

printf("[%d]",r[k].key);

else

printf("%4d",r[k].key);

printf("\n");

quicksort(r,s,i-1);

quicksort(r,i+1,t);

}}void main();

rectype r[maxe];

printf("希爾排序:\n") ;

for(i=0;i r[i].key=a[i];

printf("\n");

printf(" 初始關鍵字");

for(k=0;kprintf("%3d",r[k].key);

printf("\n");

shellsort(r,n);

printf(" 最後結果 ");

for(k=0;kprintf("%3d",r[k].key);

printf("\n\n");

printf("快速排序:\n");

for(i=0;i r[i].key=a[i];

printf("\n");

printf(" 初始關鍵字");

for(k=0;kprintf("%4d", r[k].key);

printf("\n");

quicksort(r,0,n-1);

printf(" 最後結果 ");

for(k=0;kprintf("%4d",r[k].key);

printf("\n\n");

}四測試結果

五演算法思想

希爾排序:將人r[分別插入各組當前有序區中,將r[ j ]與r[ j+d ]j交換,輸出每一趟的排序結果,遞減增量d。

快速排序:區間內至少在乙個元素的情況,用區間的第乙個記錄作為基準,從區間兩端交替向中間掃瞄,直至i=j為止。從右向左掃瞄,找第乙個關鍵字小於的r[ j ],表示找到這樣的r[ j],r[i]r[j]交換。

六實驗結論

通過實驗掌握了希爾排序和快速排序的運算方法。

C經典演算法 氣泡排序 選擇排序 插入排序 希爾排序

public void bubblesort int r 本趟排序未發生交換,提前終止演算法 if exchange 氣泡排序 本人用了c 開發出氣泡排序演算法。希望能為c 語言的學習者帶來一些益處。不要忘了,學語言要花大力氣學資料結構和演算法。using system namespace bubb...

快速排序演算法介紹

設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。一趟快...

排序演算法應用一 快速 選擇 冒

排序演算法應用一 快速 選擇 冒泡法排序 二 設計思路 1 總體設計 1 分析程式的功能 1 輸入10個數 2 對10個數用三種方法進行排序 2 系統總體結構 設計程式的組成模組,簡述各模組功能。1 主函式輸入資料,輸出結果 2 五個其它函式,三種不同方法 快速法選擇法冒泡法 對資料進行排序 2 各...