快速排序


</pre><pre code_snippet_id="494078" snippet_file_name="blog_20141023_1_1140798" name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#define N	10

int KeyPos(int arr[], int low, int high);
void QuickSort(int arr[], int low, int high);

int main()
{
	int a[10] = {11, 2, 4, 3, 12,
				 8, 9, 5, 7, 10};
	for (int i = 0; i < N; i ++)
	{
		printf("%-4d", a[i]);
	}
	printf("\n");
	
	QuickSort(a, 0, N-1);
	

	for (int i = 0; i < N; i ++)
	{
		printf("%-4d", a[i]);
	}

	system("pause");
	return 0;
}

int KeyPos( int arr[], int low, int high )
{
	int key = arr[low];
	while (low < high)
	{
		while (low <high && arr[high] >= key)
			high --;
		if (low < high)
		{
			arr[low++] = arr[high];
		}
		while (low < high && arr[low] <= key)
			low ++;
		if (low < high)
		{
			arr[high--] = arr[low];
		}
	}
	arr[low] = key;

	return low;
}

void QuickSort( int arr[], int low, int high )
{
	int keypos;
	if (low < high)
	{
		keypos = KeyPos(arr, low, high);
		QuickSort(arr, low, keypos-1);
		QuickSort(arr, keypos+1, high);
	}
}

基本思想:关键字key为中心,左边的数小于key,右边的数大于key
    1.取arr[low]为关键字key,
    2.从最高位high开始,自右向左,找到第一个小于key的数,复制给arr[low].
    3.从low+1开始,自左向右,找到第一个大于key的数,复制给arr[high];重复2.3直到low == high为止;即一次快速排序完成。
    4.然后对关键字key左边的数使用快速排序,关键字key右边的数使用快速排序。(递归思想)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值