快速排序

快速排序,一种不稳定但很nb的排序得意


快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(度娘解释)
到底啥意思? 疑问

st解读:也就是说,一些数排成一列,从中间分为两段,辣么从两节开始,分别找数。先从第一节开始,如果这个数小于中间数不管,继续;else 比中间大,停下来,扫描第二节。从第二节开始,如果这个数大于中间数不管,继续;else 比中间小,停下来,与前面那个交换位置。     如此反复,就可以得到一个保证第一节每个数都比后面一节小。这是用递归手法,递归第一节,递归第二节。便可以得到一个从小到大排列的数列!


那么代码如何实现?疑问

答:递归!


上代码!

#include<stdio.h>
#include<stdlib.h>
#define MAX 1001
int a[MAX];
void qsort(int l,int r){//核心,凑合着看吧
	int i,j,k,m;
	i=l; j=r; m=a[(i+j)/2];
	do{
	    while (a[i]<m) i++;//找出那个大于m的数
	    while (a[j]>m) j--;//找出那个小于m的数
	    if (i<=j){//交换
	    	k=a[i]; a[i]=a[j]; a[j]=k;
	    	i++; j--;
		}
	}while (i<=j);
	if (l<j) qsort(l,j);//分别再递归
	if (i<r) qsort(i,r);
}
int main(){
	int n,i,j; 
	scanf("%d",&n);
	for (i=1;i<=n;i++)
 		scanf("%d",&a[i]);
	qsort(1,n);
	for (i=1;i<=n;i++)
  		printf("%d ",a[i]);
	puts(""); 
	return 0;
}


是不是恍然大悟了?大笑


跪求赞求访问求评论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值