也不算是原创,以下的代码是从<征服C指针>的书中摘录的一段代码,主要是验证了一下速度。
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define NUM_MAX (10000 * 10000)
void fill_data(int *data, int data_length);
void quick_sort(int *data, int left, int right);
int main(
const int argc,
const char *argv[]
)
{
int *data;
int buf_length, left, right;
DWORD b_tick, e_tick;
buf_length = NUM_MAX * sizeof(int);
data = (int *)malloc(buf_length);
if (data == NULL)
{
printf("malloc %d byte failed\n", buf_length);
return 0;
}
fill_data(data, NUM_MAX);
left = 0;
right = NUM_MAX - 1;
b_tick = GetTickCount();
quick_sort(data, left, right);
e_tick = GetTickCount();
printf("quick sort %d int b_tick=%d e_tick=%d time=%d\n", NUM_MAX, b_tick, e_tick, e_tick - b_tick);
free(data);
getchar();
return 0;
}
void fill_data(int *data, int data_length)
{
int i;
srand(GetTickCount());
for (i = 0; i < data_length; ++i)
{
data[i] = rand();
}
}
void quick_sort(int *data, int left, int right)
{
int left_index, right_index, pivot, tmp;
left_index = left;
right_index = right;
pivot = data[(left + right) / 2];
while (left_index <= right_index)
{
for (; data[left_index] < pivot; left_index++);
for (; data[right_index] > pivot; right_index--);
if (left_index <= right_index)
{
tmp = data[left_index];
data[left_index] = data[right_index];
data[right_index] = tmp;
left_index++;
right_index--;
}
}
if (right_index > left)
{
quick_sort(data, left, right_index);
}
if (left_index < right)
{
quick_sort(data, left_index, right);
}
}
对1亿个整数排序,运行结果是:quick sort 100000000 int b_tick=26531718 e_tick=26555468 time=23750 相信大多数的机器比我的配置好,可以得到更少的时间。