各種基本排序演算法的比較

2021-10-06 12:19:35 字數 3230 閱讀 2399

給定n個(長整型範圍內的)整數,要求輸出從小到大排序後的結果。

本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下:

資料1:只有1個元素;

資料2:11個不相同的整數,測試基本正確性;

資料3:103個隨機整數;

資料4:104個隨機整數;

資料5:105個隨機整數;

資料6:105個順序整數;

資料7:105個逆序整數;

資料8:105個基本有序的整數;

資料9:105個隨機正整數,每個數字不超過1000。

輸入第一行給出正整數n(≤10

​5​​ ),隨後一行給出n個(長整型範圍內的)整數,其間以空格分隔。

在一行中輸出從小到大排序後的結果,數字間以1個空格分隔,行末不得有多餘空格。

114 981 10 -17 0 -20 29 50 8 43 -5

-20 -17 -5 0 4 8 10 29 43 50 981

#include

using namespace std;

void

swap

(long

long

*a,long

long

*b)//選擇排序

void

selectionsort

(long

long num,

long

long n)

}swap

(&num[i]

,&num[t]);

}}//氣泡排序

void

bubblesort

(long

long num,

long

long n)}}

//插入排序

void

insertsort

(long

long num,

long

long n)

num[j]

=tmp;}}

//希爾排序

void

shellsort

(long

long num,

long

long n)

;for

(si=

0;sedgewick[si]

>=n;si++);

for(

int i=sedgewick[si]

;i>=

1;i=sedgewick[

++si]

) num[d]

=tmp;}}

}/*-------------------堆排序------------------*/

void

percdown

(long

long num,

int n,

int p)

num[parent]

=t;}

void

heapsort

(long

long num,

int n)

for(

int i=n-

1;i>=

1;i--)}

/*------------------堆排序結束-------------------*/

/*------------------歸併排序遞迴演算法---------------------*/

void

merge

(long

long a,

long

long tmpa,

int l,

int r,

int rightend)

while

(l<=leftend)

tmpa[tmp++

]=a[l++];

while

(r<=rightend)

tmpa[tmp++

]=a[r++];

for(

int i=

0;i,rightend--)}

/*分而治之使用遞迴實現*/

void

msort

(long

long a,

long

long tmpa,

int l,

int rightend)

}/*歸併排序遞迴實現的介面*/

void

mergesort

(long

long a,

int n)

else

}/*-------------------歸併排序遞迴演算法結束-----------------*/

/*-------------------歸併排序非遞迴演算法實現---------------*/

void

merge1

(long

long a,

long

long tmpa,

int l,

int r,

int rightend)

while

(l<=leftend)

tmpa[tmp++

]=a[l++];

while

(r<=rightend)

tmpa[tmp++

]=a[r++];

}void

merge_pass

(long

long a,

long

long tmpa,

int n,

int length)

void

mergesort1

(long

long a,

int n)

free

(tmpa);}

else

}/*-------------------歸併排序非遞迴演算法結束---------------*/

intmain()

// selectionsort(number,n);

// bubblesort(number,n);

// shellsort(number,n);

// insertsort(number,n);

// heapsort(number,n);

mergesort1

(number,n)

;for

(long

long i=

0;i)}

各種排序演算法比較

花了很長時間終於把排序的基礎學了一下,這段時間學了很多東西,總結一下 學的排序演算法有 插入排序,合併排序,氣泡排序,選擇排序,希爾排序,堆排序,快速排序,計數排序,基數排序,桶排序 沒有實現 比較一下學習後的心得。我不是很清楚他們的時間複雜度,也真的不知道他們到底誰快誰慢,因為書上的推導我確實只是...

各種排序演算法比較

排序相關的演算法複雜度分析 下邊分別實現下各個演算法 簡單選擇排序 1 簡單選擇排序 2void select sort int a,intn 3 16 17swap a i a index 18 19 這裡簡單選擇排序之所以不穩定是因為交換的時候會打亂順序,例如 5,4,5,1,6。第一次交換後會...

各種排序演算法的比較

穩定的排序演算法有 直接插入,冒泡,歸併,基數排序。一.快速排序 快排的三個步驟 1.選取樞紐元,一般用三數中值法,即求得left,center,right的中位數 不要用第乙個數,如果原始資料是倒序,效率將會很低 2.根據樞紐元把輸入資料劃分成為兩部分,左半部分的數比樞紐元小,右半部分比樞紐元大。...