/************************************************************************/
/* Insert 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;
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 InsertSort(int* numbers)
{
/*
//此方法比下面两种方法的效率要高
for (int i = 1; i < MAX; i++)
{
int pos = i;
int temp = numbers[pos];
while (pos > 0 && temp < numbers[pos-1])
{
numbers[pos] = numbers[pos-1];
pos--;
}
numbers[pos] = temp;
}
*/
/*
for (int i = 1; i < MAX; i++)
{
//注意变量j的判断条件:“>”
for (int j = i; j > 0 && numbers[j] < numbers[j-1]; j--)
{
Swap(numbers[j], numbers[j-1]);
}
}
*/
for (int i = 1; i < MAX; i++)
{
//注意变量j的判断条件:“>=”
for (int j = i-1; j >= 0 && numbers[j] > numbers[j+1]; j--)
{
Swap(numbers[j], numbers[j+1]);
}
}
}
void main()
{
//int num[MAX];
int* num = new int[MAX];
Input(num);
cout << "Bubble before: " << endl;
//Output(num);
Timer timer;
InsertSort(num);
cout <<"\nTime Elapsed: " << timer.GetElapsedTime() << "s" << endl;
cout << "\nBubble after: " << endl;
//Output(num);
delete[] num;
}
测试数据:10万个int数据。
运行结果如下: