題目:給定n個(長整型範圍內的)整數,要求輸出從小到大排序後的結果。
本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下:
輸入第一行給出正整數n(≤10^5),隨後一行給出n個(長整型範圍內的)整數,其間以空格分隔。
在一行中輸出從小到大排序後的結果,數字間以1個空格分隔,行末不得有多餘空格。
11
4 981 10 -17 0 -20 29 50 8 43 -5
-20 -17 -5 0 4 8 10 29 43 50 981
解答:我們把全部排序演算法全都弄到乙個程式裡。
程式**:
#include #include using namespace std;
#define maxvertexnum 100005
typedef int elementtype;
elementtype myarray[maxvertexnum];
void swap(elementtype& a, elementtype& b)
void bubble_sort(elementtype a, int n)
} if (flag == 0) break; // 全程無交換 }}
void insertionsort(elementtype a, int n)
}//希爾排序 - 用sedgewick增量序列
void shellsort(elementtype a, int n)
; for (si = 0; sedgewick[si] >= n; si++)
; // 初始的增量sedgewick[si]不能超過待排序列長度
for (d = sedgewick[si]; d>0; d = sedgewick[++si])
for (p = d; p= d && a[i - d]>tmp; i -= d)
a[i] = a[i - d];
a[i] = tmp;
} //檢視步驟
//設一共71個資料,
//d = 41,p=41, 0,41 1 42 一直到 30 71
//d = 19,p=0 19,1 20……,19 38,20 39,21 40……
}void swap(elementtype *a, elementtype *b)
void percdown(elementtype a, int p, int n)
a[parent] = x;
}void heapsort(elementtype a, int n)
}// 歸併排序 - 遞迴實現
// l = 左邊起始位置, r = 右邊起始位置, rightend = 右邊終點位置
void merge(elementtype a, elementtype tmpa, int l, int r, int rightend)
while (l <= leftend)
tmpa[tmp++] = a[l++]; // 直接複製左邊剩下的
while (r <= rightend)
tmpa[tmp++] = a[r++]; // 直接複製右邊剩下的
for (i = 0; i < numelements; i++, rightend--)
a[rightend] = tmpa[rightend]; // 將有序的tmpa複製回a
}void msort(elementtype a, elementtype tmpa, int l, int rightend)
}void mergesort(elementtype a, int n)
else printf("空間不足");
}// 歸併排序 - 迴圈實現
// 這裡merge函式在遞迴版本中給出
// length = 當前有序子列的長度
void merge_pass(elementtype a, elementtype tmpa, int n, int length)
void merge_sort(elementtype a, int n)
free(tmpa);
} else printf("空間不足");
}int main(void)
第乙個,先測試氣泡排序:冒泡不行啊,超時了三個。
第二個,測試插入排序。沒想到插入排序效果比冒泡好點。
第三個,測試希爾排序:希爾排序真快!
第四個:堆排序。和希爾排序速度差不多。
第五個:遞迴歸併排序。
第六個:非遞迴歸併排序。
演算法1 排序
氣泡排序 氣泡排序,比較相鄰的元素由小到大排序 function bubblesort arr return arr view code 快速排序 以基數為標準,最右開始查小於基數停止,最左邊開始查大於基數停止,互換位置停止的位置 left right表示基數左為小於基數,基數右大於基數的 拆分基數...
09 排序1 排序
09 排序1 排序 25 分 給定n 個 長整型範圍內的 整數,要求輸出從小到大排序後的結果。本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下 include include includeusing namespace std const int cutoff 1000...
09 排序1 排序
n個 長整型範圍內的 整數,要求輸出從小到大排序後的結果。資料2 11個不相同的整數,測試基本正確性 資料3 10 3個隨機整數 資料4 10 4個隨機整數 資料5 10 5個隨機整數 資料6 10 5個順序整數 資料7 10 5個逆序整數 資料8 10 5個基本有序的整數 資料9 10 5個隨機正...