C语言快速排序的例子

也不算是原创,以下的代码是从<征服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 相信大多数的机器比我的配置好,可以得到更少的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值