快速排序的实现-C语言

介绍
         快速排序是速度非常快的排序,虽然其最糟糕(已经排好序)的时间为O(n^2),但是平均时间可以达到O(nlgn),平均性能比堆排序优越!是原地排序算法。基于分治法思想。
 
思想
         A[left..right]被分成2个(可能空)子数组A[left..center-1]和A[center+1..right]。使得前子数组每个元素都<= A[center],
而后子数组的元素全>=A[center]。
        通过递归调用快速排序。对2个子数组进行排序。
       
        下面是QuickSort.c源码。通过linux的gcc和windows的VS2010编译测试。
#include<stdio.h>

void exchange(int *a,int *b)
{
	int tmp = *b;
	*b = *a;
	*a = tmp;
}

int QPartition(int A[], int left ,int right)
{
	int key = A[right];
	int leftindex = left-1;
	int cur = left;
	for(cur;cur < right; cur++)
	{
		if(A[cur] <= key)
		{
			leftindex +=1;
			exchange(&A[leftindex],&A[cur]);
		}
	}
	exchange(&A[leftindex+1] ,&A[right]);
	return leftindex+1;
}

void QuickSort(int a[],int left,int right)
{
	if(left<right)
	{
		int center = QPartition(a,left,right);
		QuickSort(a,left,center-1);
		QuickSort(a,center+1,right);
	}
}

void printArr(int *p, int size)
{
	int i;
	for(i=0; i<size;i++)
	{
		printf("%d ",p[i]);
	}
	putchar('\n');
}



int main()
{
	int b[10]={-3,1,34,5,-1,3,43,5,123,3};

	printArr(b,10);

	QuickSort(b,0,9);

	printArr(b,10);
	
	return 0;
}

结果是:

-3 1 34 5 -1 3 43 5 123 3
-3 -1 1 3 3 5 5 34 43 123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值