基础排序算法——快速排序

 

#include<stdio.h>
void QuickSort(int a[],int left,int right)
{
	//当只有一个元素 不用再继续了,这里中断迭代递归关键点 
	if(left>=right)
	return ;
	
	int i=left;
	int j=right;
	int base=a[left];  //先把左边第一个数作为基准数,拿出来比较
	
//	下面进行交换 ,大的数放到base右边,小的放左边,相等的选固定一边就行 
	while(i!=j)
	{
		//先从右边寻求第一个比base小的数 
		while(j>i&&a[j]>=base)
			j--;
		a[i]=a[j];  //如果找到就放在i的位置(上一个位置),这里不理解可以用  5 3 9 7 2 6 实现以下 
		
//		再从左边寻求第一个比base大的数
		while(j>i&&a[i]<base) 
			i++;
		a[j]=a[i];
		
	} 
	
//	到这里其实i与j是相等的,走到了中间了。这时把base放到这个位置
	a[i]=base;
	
//	分别递归 两边的数据进行排序 直到每个部分都是一个元素,即各个部分有序
	  QuickSort( a,left,i-1);
	  QuickSort( a,i+1,right);
}

int main()
{
	
	int i;
	int a[10]={42,54,94,10,100,58,34,63,9,74};
	QuickSort(a,0,9);
	
	for(i=0;i<10;i++)
	printf("%d,",a[i]);
	
	return 0;
}
发布了44 篇原创文章 · 获赞 72 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cj151525/article/details/85853867