小标
2018-10-10
来源 :
阅读 1557
评论 0
摘要:本文主要向大家介绍了C/C++知识点之C语言排序---快速排序,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言排序---快速排序,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
/* 快速排序由C. A. R.Hoare在1962年提出,是对冒泡排序的一种改进。
* 它的基本思想是:
* 通过一趟排序将要排序的数据分割成独立的两部分
* ,其中一部分的所有数据都比另外一部分的所有数据都要小
* ,然后再按此方法对这两部分数据分别进*/
#include<stdio.h>
#define N 30
int QSort(int a[N],int l,int r)
{
int m,i,j,p;
if(l>=r)return 0; /*递归出口,当序列长度小于等于0时,视为排序结束*/
i=l;j=r;
p=a[l]; /*取a[l]为基准元素*/
while(i<j)
{
while(a[j]>=p&&j>i) /*从a[j]往后搜索,将比基准元素p大的元素找出来*/
j--;
if(i<j)
a[i]=a[j]; /*将找出来的元素放进序列左边,将序列右边挖坑*/
while(a[i]<p&&i<j) /*从a[i]往后搜索,将比基准元素p小的元素找出来*/
i++;
if(i<j)
a[j]=a[i]; /*将找出来的元素放进序列右边,将序列左边挖坑*/
}
a[i]=p; /*划分结束,将标准元素填入最后一个坑*/
QSort(a,l,j-1); /*递归调用,将序列分成两段*/
QSort(a,j+1,r);
}
void main()
{
int i,n;
int a[N]={0};
printf("请输入序列长度:");
scanf("%d",&n);
printf("请输入该序列:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
QSort(a,0,n-1);
printf("排序之后是:");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号