归并排序 自带时间复杂度测试
生活随笔
收集整理的這篇文章主要介紹了
归并排序 自带时间复杂度测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//時間復雜度 O(N*log2N)
//穩定程度: 穩定
/*
確定分界點,中間位置
兩端排序
歸并,合二為一
*/#include<iostream>
#include<time.h>
using namespace std;
int tmp[250001];
void Sort(int List[], int l, int r);int main()
{int a[250000];int k, j;// 設置種子srand((unsigned)time(NULL));/* 生成 10 個隨機數 */for (k = 0; k < 250000; k++){// 生成實際的隨機數j = rand();a[k] = j;}clock_t start_time = clock();Sort(a,0,250000-1);clock_t end_time = clock();//for (int i = 0; i < 200000; i++)//{// cout << a[i] << " ";//}cout << "\n程序段運行時間:" << static_cast<double> (end_time - start_time) / CLOCKS_PER_SEC * 1000 << "ms" << endl;system("pause");
}
void Sort(int List[], int l, int r)
{if (l >= r) return;int mid = l + r >> 1; //取中間數Sort(List, l, mid), Sort(List, mid + 1, r); //左右遞歸排序int k = 0, i = l, j = mid + 1; //k表示已合并數組中有幾個元素,分開兩個有序數組while (i <= mid && j <= r) //進行雙指針比較if (List[i] <= List[j]) tmp[k++] = List[i++]; else tmp[k++] = List[j++];while (i <= mid) tmp[k++] = List[i++]; //分別處理剩余部分while (j <= r) tmp[k++] = List[j++];for (i = l, j = 0; i <= r; i++, j++) List[i] = tmp[j]; //拷入原空間}
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的归并排序 自带时间复杂度测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb——在线音乐播放器
- 下一篇: LeetCode 07. 整数反转