一.實驗內容:
1、 編寫函式分別實現插入排序和歸併排序演算法
2、 編寫主函式通過呼叫函式實現對待排資料的呼叫
3、 待排資料利用隨機函式迴圈產生10萬個以上的資料
4、 利用求系統時間的函式,分別求出2個排序函式呼叫前和呼叫後的時間,計算出插入排序執行時間和歸併排序的執行時間
5、 演算法的比較:
(1) 相同待排序資料下,插入排序和歸併排序演算法的執行時間比較;
(2) 同一種排序演算法下最好的情況,一般情況,最壞的情況執行時間比較
插入排序:插入即表示將乙個新的資料插入到乙個有序陣列中,並繼續保持有序。例如有乙個長度為n的無序陣列,進行n-1次的插入即能完成排序;第一次,陣列第1個數認為是有序的陣列,將陣列第二個元素插入僅有1個有序的陣列中;第二次,陣列前兩個元素組成有序的陣列,將陣列第三個元素插入由兩個元素構成的有序陣列中......第n-1次,陣列前n-1個元素組成有序的陣列,將陣列的第n個元素插入由n-1個元素構成的有序陣列中,則完成了整個插入排序。
以下面5個無序的資料為例:
65 27 59 64 58 (文中僅細化了第四次插入過程)
第1次插入: 27 65 59 6458
第2次插入: 27 59 65 6458
第3次插入: 27 59 64 6558
第4次插入: 27 58 59 6465
二.演算法分析
三.實驗**
#include#include//數學
#include//時間
void insertsort(long int *, long int); //定義插入排序函式
void merge(long int x, long int z, long int s, long int u, long int v);
void mergepass(long int x, long int y,long int n, long int t);
void mergesort(long int x,long int n);
void insertsort(long int *array,long int len)
else
} array[j+1] = temp;
} } //將有序的x[s..u]和x[u+1..v]歸併為有序的z[s..v]
void merge(long int x,long int z, long int s, long int u, long int v)
while( i <= u ) //將x中剩餘元素x[i..u]複製到z
z[q++] = x[i++];
while( j <= v ) //將x中剩餘元素x[j..v]複製到z
z[q++] = x[j++];
}
/* x[0..n-1]表示參加排序的初始序列
* t為某一趟歸併時子串行的長度
* 整型變數i指出當前歸併的兩個子串行中第1個子序列的第1個元素的位置
* y[0..n-1]表示這一趟歸併後的結果
*/
void mergepass(long int x, long int y, long int n,long int t)
if( n - i > t ) //若最後剩下的元素個數大於乙個子串行的長度t時
merge(x, y, i, i + t - 1, n - 1);
else //n-i <= t時,相當於只是把x[i..n-1]序列中的資料賦值給y[i..n-1]
for( j = i ; j < n ; ++j )
y[j] = x[j];
}
void mergesort(long int x,long int n)
free(y);
}
void print_array(long int array,long int n)
int main()
insertsort(d,n);
finish = clock();//取結束時間
printf( "\n%f 毫秒\n",(finish-start)/clocks_per_sec*1000); /
/* for(i=0;i<100;i++)
printf("\n\n\n\n\n");
*/ //
printf("%d個數歸併排序最好結果用時:",n);
start=clock();//取開始時間
for(i=0;i=0;i--)
mergesort(d,n);
/*for(i=0;i四.實驗結果
五.實驗分析
在隨機數組中,歸併排序明顯優於插入排序,且數值越大越明顯。有序序列結果不明顯,但仍然歸併排序優於插入排序。
插入排序與歸併排序
關於排序似乎從大一開始學習變成就開始在使用各種排序方法了,今天看了下有關於插入排序和歸併排序的內容,並且對應在leetcode 上面做了兩道測試題,因此就對插入排序和歸併排序做乙個簡單的小結吧,就當做是我的學習筆記,大佬請勿嘲笑!關於插入排序主要的思想就是從左到右的遍歷乙個序列,有乙個標識來標記,保...
插入排序 歸併排序
插入排序 define len 5 int a len void insertion sort void int i,j,k for j 1 j len j k a j i j 1 while i 0 a i k a i 1 a i i a i 1 k 歸併排序 int a 8 void merge...
插入排序 歸併排序
演算法導論初涉,第一講練習內容 include define n 6 int a n void init 初始化陣列 a i 1 k void output int a,int n void merge int low,int mid,int high while s mid b i a s whi...