《資料結構》 內部排序演算法比較

2021-10-07 05:32:00 字數 4291 閱讀 7461

題目

各種內部排序演算法的時間複雜度分析結果只給出了演算法執行時間的階,或大概執行時間。試通過隨機的資料比較各演算法的關鍵字比較次數和關鍵字移動次數,以取得直觀感受。

基本要求:

(1) 從以下常用的內部排序演算法至少選取5種進行比較:直接插入排序;折半折入排序;希爾排序;起泡排序;快速排序;簡單選擇排序;堆排序;歸併排序。

(2) 待排序表的表長為20000;其中的資料要用偽隨機數產生程式產生;至少要用5組不同的輸入資料作比較;比較的指標為有關鍵字參加的比較次數和關鍵字移動次數(關鍵字交換計為3次移動)。

**

#ifndef _head_h

#define _head_h

#include

#include

#include

#include

#define max 20002

typedef

int keytype;

typedef

int infotype;

typedef

struct ss

rectype;

//排序的元素的型別

typedef

struct sss

analysis;

//儲存分析效率的4資料

//交換函式

void

swap

(rectype &a, rectype &b)

int compare =

0, move =0;

//關鍵字比較和移動的次數

analysis analy[5]

;//五種演算法的分析資料

//直接插入排序演算法

//時間複雜度o(n^2)

void

insertsort

(rectype r,

int n)

;//折半插入排序法

//把無序區插入到有序區里,由於前面的插入排序法實現了有序,所以直接在

//有序區利用折半查詢來尋找的改進演算法

void

bininsertsort

(rectype r,

int n)

;//希爾排序演算法

void

shellsort

(rectype r,

int n)

;//氣泡排序演算法

void

bubblesort

(rectype r,

int n)

;/*快速排序演算法*/

intpartition

(rectype r,

int s,

int t)

;//一趟劃分

//對r[s..t]的元素進行快速排序

void

quicksort

(rectype r,

int s,

int t)

;//選單

void

menu()

;//呼叫直接插入排序的實現函式,即選單1

void

firstfun

(rectype a,

int n)

;//選單2

void

secondfun

(rectype a,

int n)

;//選單3

void

thirdfun

(rectype a,

int n)

;//選單4

void

fourthfun

(rectype a,

int n)

;//選單5

void

fifthfun

(rectype a,

int n)

;//選單6

void

sixthfun

(rectype a,

int n)

;#endif

//五種常見的演算法

/////直接插入排序演算法

//時間複雜度o(n^2)

void

insertsort

(rectype r,

int n)

while

(j >=

0&& r[j]

.key > tmp.key)

; r[j +1]

= tmp;

//最後把tmp放在對應的位置

move+=2

;//移動的temp}}

}//折半插入排序法

//把無序區插入到有序區里,由於前面的插入排序法實現了有序,所以直接在

//有序區利用折半查詢來尋找的改進演算法

void

bininsertsort

(rectype r,

int n)

for(j = i -

1; j >= high +

1; j--

) r[high +1]

= tmp;

move +=2

;//tmp交換}}

}///

//希爾排序演算法

void

shellsort

(rectype r,

int n)

r[j + d]

= tmp;

move +=2

;//tmp進行兩次操作

} d = d /2;

}}/////氣泡排序演算法

void

bubblesort

(rectype r,

int n)if(

!exchange)

return;}

}//*快速排序演算法*/

intpartition

(rectype r,

int s,

int t)

//一趟劃分

r[i]

= r[j]

;//找到這樣的r[j],放入r[i]處

move++

;//移動+1

while

(i < j && r[i]

.key <= tmp.key)

r[j]

= r[i]

;//找到這樣的r[i],放入r[j]處

move++

;//移動加一

} r[i]

= tmp;

move+=2

;//temp的交換

return i;

}void

quicksort

(rectype r,

int s,

int t)

//對r[s..t]的元素進行快速排序}/

void

menu()

//呼叫直接插入排序的實現函式,即選單1

void

firstfun

(rectype a,

int n)

//選單2

void

secondfun

(rectype a,

int n)

//選單3

void

thirdfun

(rectype a,

int n)

//選單4

void

fourthfun

(rectype a,

int n)

//選單5

void

fifthfun

(rectype a,

int n)

//選單6

void

sixthfun

(rectype a,

int n)

int main (

)system

("pause");

system

("cls");

menu()

;printf

("請選擇操作:");

scanf

("%d"

,&k);}

system

("pause");

return0;

}

執行結果

記得點讚啊!!

資料結構中各種內部排序演算法的比較

20101002 1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分...

資料結構七大內部排序 演算法比較

1 氣泡排序 include using namespace std 氣泡排序 void bubblesort int a,int n if exchange false 氣泡排序測試 intmain bubblesort nums,n for int i 0 i i else delete num...

資料結構 各種排序演算法比較

一,各種排序演算法比較 各種排序演算法比較 二,相關概念 1 穩定排序和非穩定排序 簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就說這種排序方法是穩定的。反之,就是非穩定的。比如 一組數排序前是a1,a2,a3,a4,a5,其中a2 a4,經過某種排序後為a1,...