快速排序——基本版

快速排序主要是利用了二分的思想进行排序,时间复杂度是NlogN;
算法实现:
首先选出一个基准数(这里选a[0]做基准数),将比基准数小的都放到左边,大的就放到右边;
此处的实现我利用两个哨兵i、j,i从数组的左边开始,j从数组的右边开始;
当a[i]小于或等于基准数,i自加1,直到a[i]>基准数,
j也做同样的操作,只是改掉大小关系;
等到a[i],a[j]都满足关系了,将a[i],a[j]位置互换;
重复上述操作,直到i=j;
将基准数与a[i]调换;
再递归的对左右进行排序。

#include<stdio.h>
#include<stdlib.h>

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

void quicksort(int a[],int left,int right)
{
	int i,j,t,tmp;
	if(left>right)
		return;
	tmp=a[left];
	i=left,j=right;
	while(i!=j)
	{
		while(a[j]>=tmp&&i<j) j--;
		while(a[i]<=tmp&&i<j) i++;
		if(i<j)
			Swap(&a[i],&a[j]);
	}
	Swap(&a[i],&a[left]);

	quicksort(a,left,i-1);
	quicksort(a,i+1,right);

}

int main()
{
	int arr[10];
	int i=0;
	for(i=0;i<10;i++)
	{
		scanf("%d",&arr[i]);
	}

	int left=0,right=9;
	quicksort(arr,left,right);

	for(i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
   
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43425598/article/details/84440163
今日推荐