算法导论 之 快速排序[C语言]

1 算法实现

  快速排序的时间复杂度为O(n^2),但其通常是用于排序的最佳的使用选择,这是因为其平均性能相当好:期望的运行时间为O(nlgn)。其实现的算法如下:

int quick_sort(int *array, int low, int high)
{
	int idx = 0;

	if(low < high)
	{
		idx = partition(array, low, high);

		quick_sort(array, low, idx-1);
		quick_sort(array, idx+1, high);
	}

	return 0;
}

int partition(int *array, int low, int high)
{
	array[0] = array[low]; /* array[0]作为临时交换空间 */
	while(high > low)
	{
		while((array[high]>=array[0]) && (high>low)) { high--; }

		array[low] = array[high];
		left++;

		while((array[low]<=array[0]) && (high>low)) { low++; }

		array[high] = array[low];
		right--;
	}

	array[low] = array[0];

	return low;
}

2 函数调用

void print(int *array, int low, int high)
{
	int idx = low;
	char msg[1024] = {0}, str[128] = {0};

	while(idx <= max)
	{
		sprintf(str, "array[%d]=%d ", idx, array[idx]);
		strcat(msg, str);
		idx++;
	}
	fprintf(stdout, "%s\n", msg);
}

int main(void)
{
	int array[] = {-1, 9, 8, 7, 30, 5, 4, 3, -2, 1, 0};

	quick_sort(array, 1, 10);

	print(array, 1, 10);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值