/************************************************************************/
/*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数据。
运行结果如下: