归并排序
2014-07-19 18:07
148 查看
/************************************************************************/ /*Shell Sort */ /************************************************************************/ #include <iostream> #include <time.h> #include "Timer.h" using namespace std; #define Swap(x, y) {int temp = x; x = y; y = temp;} const int MAX = 100000; int* auxiliary = new int[MAX]; void Input(int* numbers) { srand((unsigned)time(NULL)); for (int i = 0; i < MAX; i++) { numbers[i] = rand() % (MAX * 10); } } void Output(int* numbers) { for (int i = 1; i <= MAX; i++) { cout << numbers[i-1] << " "; if (0 == i % 10) { cout << endl; } } cout << endl; } void Merge(int* numbers, int low, int mid, int high) { int i = low; int j = mid + 1; int k = low; while (i <= mid && j <= high) { if (numbers[i] < numbers[j]) { auxiliary[k++] = numbers[i++]; } else { auxiliary[k++] = numbers[j++]; } } //对未处理完的序列进行收尾处理 if (i <= mid) { while (i <= mid) { auxiliary[k++] = numbers[i++]; } } else { while (j <= high) { auxiliary[k++] = numbers[j++]; } } for (int i = low; i <= high; i++) { numbers[i] = auxiliary[i]; } } void MergeSort(int* numbers, int low, int high) { if (low < high) { int mid = (low + high) / 2; MergeSort(numbers, low, mid); MergeSort(numbers, mid+1, high); Merge(numbers, low, mid, high); } } void main() { //int num[MAX]; int* num = new int[MAX]; Input(num); cout << "Bubble before: " << endl; //Output(num); Timer timer; MergeSort(num, 0, MAX-1); cout <<"\nTime Elapsed: " << timer.GetElapsedTime() << "s" << endl; cout << "\nBubble after: " << endl; //Output(num); delete[] num; delete[] auxiliary; }
测试数据:10万个int数据。
运行结果如下:
相关文章推荐