日期:2014-05-16  浏览次数:20734 次

经典快速排序,linux纯C实现。注意swap方法,并且这个算法还需再敲写15篇。

#include <stdio.h>
void swap(int* a, int* b)
{
	*a = *a ^ *b;
	*b = *a ^ *b;
	*a = *a ^ *b;
}
int partition(int* a, int fI, int lI)
{
	int i = fI-1, j = 0;
	for(j=fI;j<=lI;j++)
	{
		if(*(a+j) < *(a+lI))
		{
			i++;
			if(i != j) swap(a+j, a+i);
		}
	}
	if(i+1 != lI)	swap(a+i+1, a+lI);
	return i+1;
}
void quickSort(int* a, int fI, int lI)
{
	int partI = 0;
	if(fI >= lI)
		return;
	partI = partition(a, fI, lI);
	quickSort(a, fI, partI-1);
	quickSort(a, partI+1, lI);
}
int main()
{
	int a[10] = {241,325425,56765,234,13,34574,4653,5687689,432552,2789};
	int L = sizeof(a) / sizeof(int);
	int i = 0;
	quickSort(a, 0, L-1);
	for(;i<L;i++)
		printf("%d ", *(a+i));
	printf("\n");
	return 0;
}


注意程序中的swap方法是通过指针传递的,所以传递进去的两个指针不能是同一个地址,否则,这个地址中的元素值将变成0,所以本程序中在使用是都判断了是否是同一地址。