給定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.根據樞紐元把輸入資料劃分成為兩部分,左半部分的數比樞紐元小,右半部分比樞紐元大。...