每天一个小程序(15)——交换排序之快速排序

      快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。

      通俗的话语讲就是,排序之前选择一个标志数据(一般选择最后一个),然后第一次排序中,以此标记数据为基准,小于它的放在“小数据区”,比如左半边区,大于它的放在“大数据区”,比如右半边区,然后得到中间的位置,以此位置将程序分为宏观有序(左半边区之和小于右半边区)的两部分,再通过第一步的方法,将这两部分再分成宏观有序的四部分,最后直到不能再继续分位置,则该序列有序。

#include<stdio.h>


void QuickSort(int *A, int p, int r);
int Partition(int *A, int p, int r);
void Display(int *A)
{
	for(int i = 0; i < 20; i++)
	{
		printf("%d ",A[i]);
	}
}


void main()
{
	int A[] = {5,4,7,1,13,0,322,92,35,19,3,78,-32,45,77,43,933,8,49,11};
	QuickSort(A,0,19);
	Display(A);
}


void QuickSort(int *A, int p, int r)
{
	int q;
	if(p < r)
	{
		q = Partition(A,p,r);
		QuickSort(A,p,q - 1);
		QuickSort(A,q + 1,r);
	}
}

int Partition(int *A, int p, int r)//分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r]  
{
	int x,i,j,temp;

	x = A[r];
	i = p - 1;
	for(j = p; j <= r - 1; j++)//以A[r]为判断标准,然后调整元素使得A[p..q-1]小于等于A[r],也小于等于A[q+1..r]  
	{
		if(A[j] <= x)//交换
		{
			i += 1;
			temp = A[i];
			A[i] = A[j];
			A[j] = temp;
		}
	}
	temp = A[i + 1];//交换
	A[i + 1] = A[r];
	A[r] = temp;

	return i+1;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值