问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 快速排序源程序

发布网友 发布时间:2022-05-02 21:29

我来回答

2个回答

热心网友 时间:2022-06-27 10:02

快速排序算法
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:

1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;

2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];

3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;

4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值,两者交换;

5)、重复第3、4步,直到I=J;

例如:待排序的数组A的值分别是:(初始关键数据X:=49)

A[1] A[2] A[3] A[4] A[5] A[6] A[7]:

49 38 65 97 76 13 27

进行第一次交换后: 27 38 65 97 76 13 49

( 按照算法的第三步从后面开始找

进行第二次交换后: 27 38 49 97 76 13 65

( 按照算法的第四步从前面开始找>X的值,65>49,两者交换,此时I:=3 )

进行第三次交换后: 27 38 13 97 76 49 65

( 按照算法的第五步将又一次执行算法的第三步从后开始找

进行第四次交换后: 27 38 13 49 76 97 65

( 按照算法的第四步从前面开始找大于X的值,97>49,两者交换,此时J:=4 )

此时再执行第三不的时候就发现I=J,从而结束一躺快速排序,那么经过一躺快速排序之后的结果是:27 38 13 49 76 97 65,即所以大于49的数全部在49的后面,所以小于49的数全部在49的前面。

快速排序就是递归调用此过程——在以49为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列,根据这种思想对于上述数组A的快速排序的全过程如图6所示:

初始状态 {49 38 65 97 76 13 27}

进行一次快速排序之后划分为 {27 38 13} 49 {76 97 65}

分别对前后两部分进行快速排序 27

结束 结束 {49 65} 76

49 结束

结束

图6 快速排序全过程

1)、设有N(假设N=10)个数,存放在S数组中;

2)、在S[1。。N]中任取一个元素作为比较基准,例如取T=S[1],起目的就是在定出T应在排序结果中的位置K,这个K的位置在:S[1。。K-1]<=S[K]<=S[K+1..N],即在S[K]以前的数都小于S[K],在S[K]以后的数都大于S[K];

3)、利用分治思想(即大化小的策略)可进一步对S[1。。K-1]和S[K+1。。N]两组数据再进行快速排序直到分组对象只有一个数据为止。

热心网友 时间:2022-06-27 10:03

#include<stdio.h>
#include<stdlib.h>
int a[100];
void ks(int i, int j)
{
int t,l=i,h=j,m;
m=a[(i+j)/2];
while (i<=j)
{
while (a[i]<m) i=i+1;
while (a[j]>m) j=j-1;
if (i<=j)
{ t=a[i]; a[i]=a[j]; a[j]=t; i=i+1; j=j-1;}
}
if(i<h) ks(i,h);
if(l<j) ks(l,j);
}

main()
{
int n,i,j,k;
scanf("%d", &n);
for (i=1;i<=n;i=i+1)
scanf("%d", &a[i]);
ks(1,n);
for (i=1; i<=n; i=i+1)
printf("%d ",a[i]);
system("pause");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孕妇用微波炉要离多远合适 孕妇使用微波炉的注意事项 微波炉热出来的东西有辐射吗-微波炉辐射范围是几米 当在使用微波炉的时候是不是要离远点?是不是对身体有害? 需 恶魔的小宠儿全集及类似言情小说,谢谢 英雄联盟手游168龙魂水晶免费兑换码-英雄联盟手游168龙魂水晶免费兑换码... 什么是引导区 取得工程技术或工程经济专业中级职务,并任职满3年.3年指的是取得中级... ...全国注册监理工程师考试,并且职称要求3年如何理解 反脸无情的近义词 重庆市第一中学学生成果 应用商店里直播软件只有一个电视猫,电视猫不好用,老回卡,怎么安装其他软件? c语言中的排序代码 ,求大神,有木有? 滚鸡蛋去湿毒科学吗 滚鸡蛋去湿毒有科学依据吗? “滚鸡蛋可以祛湿毒”的说法真的合理? 滚鸡蛋祛湿毒,到底什么原理啊,有杰宝 银饰去湿气 鸡蛋里放银器滚脸,是否能去湿毒 关系数据库事务模型有哪些? 为什么要使用数据库的事务? wifi不好使了给谁打电话,号码是多少? 求秋季运动会广播稿(太原二十九中),要表示团结一致的 帮我写一下运动员加油的广播稿,大约5行 徒步一天需要吃多少压缩饼干? 压缩饼干吃几片会饱吗 压缩饼干应该吃多少? 哺乳期可以拔牙吗?我牙齿有些松动了,而且一边有裂缝了,很痛,可以去拔牙吗 哺乳期牙齿疼,能做根管治疗吗? 哺乳期可以做根管治疗牙齿吗 哺乳期可以补蛀牙吗 请编写程序使用快速排序算法对数组中的数据进行降序排序。 JAVA 用什么工具可以对excel进行创建组的操作呢??? 扣扣给好友用文件发照片,说文件上传次数已达上限,请稍后再试怎么办 裸色塑料人体模特涂成白色用什么材料 裸色是由哪些颜色调配出的 韩国31所学校限制内衣颜色,你是怎样看待这件事情的? 李英爱黑底印花配白皙肌肤,美到人心底,你怎么看? 一个女人想要变得独立优雅,她在穿搭方面要做出哪些改变? 糖果色和裸色甲油胶有什么区别 莫兰迪色的半身裙搭配白衬衣,更适合哪些风格的女生? 见老同学要穿什么衣服比较合适? 指甲颜色又白又紫,表明身体出现什么问题 课文以小虫子什么的方式。 我是一只小虫子破折号的作用 皮肤发黄适合什么颜色的甲油?最好有图片~~么么哒~~~ 我是一只小虫子中破折号的作用 我是一只小虫子主要内容 部编二年级我是一只小虫子是一篇满童趣的什么故事 蒸鱼豉油怎么用 美味菜肴就用蒸鱼豉油 用蒸鱼豉油怎么蒸鱼做法怎么做?