quicksort

今晚闲着,热热身,写了个快排。重新理解了一遍快排。快排的过程可以理解为一棵树,最乐观的情况是每次基准数放在中间,刚好二分这片数列,则树的高度为lg(n),树的每层有
n个点,每个点访问一次,所以复杂度为n*lg(n);悲观情况是每片数列分为1,n-1,树高变成n,复杂度退化成n*n。




#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int* numa,int* numb)
{
	int numc;
	numc=*numa;
	*numa=*numb;
	*numb=numc;
}
int partition(int* num,int left,int right)//比pivot小的数,放最左边。
{
	int StoreIndex=left;
	int i;
	for(i=left;i<right;i++)
	{
		if(num[i]<num[right])
		{
			swap(&num[StoreIndex],&num[i]);
			StoreIndex++;
		}
	}
	swap(&num[StoreIndex],&num[right]);
	return StoreIndex;
}
void quicksort(int* num,int left,int right)
{
	int pivot;
	if(left<right)
	{
		pivot=partition(num,left,right);
		quicksort(num,left,pivot-1);
		quicksort(num,pivot+1,right);
	}
}
int main()
{
	int n;
	int* num;
	int i;
	srand(time(NULL));
	while(scanf("%d",&n)!=EOF)
	{
		num=(int*)malloc(n*4+4);
		for(i=0;i<n;i++)
		{
			num[i]=rand()%1000;
			
		}
		quicksort(num,0,n-1);
		for(i=0;i<n;i++)
		{
			printf("%d%s",num[i],(i!=n-1)? " " : "");
		}
		printf("\n");
		
	}
	return 0;
}


你可能感兴趣的:(quicksort)