常见排序-快速排序

/*
 *	快速排序
 * */

#include <stdio.h>

#define LEN 10

void QuickSort(int * F, int low, int high);
int FindPos(int * F, int low, int high);

int main()
{
	int i;
	int F[] = {-2, 1, -45, 5, 4, -3};
	
	QuickSort(F, 0, 5);	//第2,3个参数表示第一个和最后一个元素的下标
	
	for (i=0; i<6; i++)
		printf("%d ", F[i]);

	printf("\n");

	return 0;
}

void QuickSort(int * F, int low, int high)
{
	int pos, i;
        
	if (low < high) {
		pos = FindPos(F, low, high);	//找到第一个元素的位置	
		
		for (i=0; i<6; i++)
			printf("%d ", F[i]);
		printf("\n");		
		        
		QuickSort(F, low, pos-1);
		QuickSort(F, pos+1, high);
	}	
}

int FindPos(int * F, int low, int high)
{
	int val = F[low];
	
	while (low < high) {
		while (low < high && F[high] >= val)
			high--;
		F[low] = F[high];

		while (low < high && F[low] <= val)
			low++;
		F[high] = F[low];
	}	//执行完该循环后,low和high是相等的
	
	F[low] = val;

	return low;	//high可以改为low, 但不能改为val 也不能改为a[low]  也不能改为a[high]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值