当前位置:首页 > 黑客服务 > 正文内容

c语言必背100代码csdn(c语言必背100代码,C语言代码大全c语言必背项目代码)

hacker2年前 (2022-08-31)黑客服务162

快速排序是对冒泡法排序的一种改进。

快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据变为有序为止。

可能仅根据基本思想对快速排序的认识并不深,接下来以对n个无序数列A[0], A[1]…, A[n-1]采用快速排序方法进行升序排列为例进行讲解。

(1)定义两个变量low和high,将low、high分别设置为要进行排序的序列的起始元素和最后一个元素的下标。第一次,low和high的取值分别为0和n-1,接下来的每次取值由划分得到的序列起始元素和最后一个元素的下标来决定。

(2)定义一个变量key,接下来以key的取值为基准将数组A划分为左右两个部分,通 常,key值为要进行排序序列的第一个元素值。第一次的取值为A[0],以后毎次取值由要划 分序列的起始元素决定。

(3)从high所指向的数组元素开始向左扫描,扫描的同时将下标为high的数组元素依次与划分基准值key进行比较操作,直到high不大于low或找到第一个小于基准值key的数组元素,然后将该值赋值给low所指向的数组元素,同时将low右移一个位置。

(4)如果low依然小于high,那么由low所指向的数组元素开始向右扫描,扫描的同时将下标为low的数组元素值依次与划分的基准值key进行比较操作,直到low不小于high或找到第一个大于基准值key的数组元素,然后将该值赋给high所指向的数组元素,同时将high左移一个位置。

(5)重复步骤(3) (4),直到low的植不小于high为止,这时成功划分后得到的左右两部分分别为A[low……pos-1]和A[pos+1……high],其中,pos下标所对应的数组元素的值就是进行划分的基准值key,所以在划分结束时还要将下标为pos的数组元素赋值 为 key。

(6)将划分得到的左右两部分A[low……pos-1]和A[pos+1……high]继续采用以上操作步骤进行划分,直到得到有序序列为止。

展开全文

c语言必背100代码csdn(c语言必背100代码,C语言代码大全c语言必背项目代码)

为了能够加深读者的理解,接下来通过一段代码来了解快速排序的具体实现方法。

#include<stdio.h>

#include<stdlib.h>

#defineN 6

intpartition(intarr[],intlow,inthigh){

intkey;

key =arr[low];

while(low<high){

while(low <high &&arr[high]>=key )

high--;

if(low<high)

arr[low++]=arr[high];

while(low<high &&arr[low]<=key )

low++;

if(low<high)

arr[high--]=arr[low];

}

arr[low]=key;

returnlow;

}

voidquick_sort(intarr[],intstart,intend){

intpos;

if(start<end){

pos =partition(arr,start,end);

quick_sort(arr,start,pos-1);

quick_sort(arr,pos+1,end);

}

return;

}

intmain(void){

inti;

intarr[N]={32,12,7,78,23,45};

printf("排序前 \n");

for(i=0;i<N;i++)

printf("%d\t",arr[i]);

quick_sort(arr,0,N-1);

printf("\n 排序后 \n");

for(i=0;i<N;i++)

printf("%d\t",arr[i]);

printf("\n");

system("pause");

return0;

}

运行结果:

排序前

32 12 7 78 23 45

排序后

7 12 23 32 45 78

在上面的代码中,根据前面介绍的步骤一步步实现了快速排序算法。接下来通过示意图来演示第一次划分操作。

在第一次划分操作中,先进行初始设置,key的值是进行划分的基准,其值为要划分数 组的第一个元素值,在上面的排序序列中为第一个元素值32,同时将low设置为要排序数组中第一个元素的下标,第一次排序操作时其值为0,将high设置为要排序序列最后一个 元素的下标,在上面的排序序列中其第一次取值为5。先将下标为high的数组元素与key进行比较,由于该元素值大于key,因此high向左移动一个位置继续扫描。由于接下来的值为 23,小于key的值,因此将23赋值给下标为low所指向的数组元素。接下来将low右移一 个位置,将low所指向的数组元素的值与key进行比较,由干接下来的12、7都小于key, 因此low继续右移扫描,直至下标low所指向的数组元素的值为78即大于key为止,将78赋值给下标为high所指向的数组元素,同时将high左移一个位置。接下来由于low不再小于high,划分结束。需要注意的是,在进行划分的过程中,都是将扫描的值与key的值进行对比,如果小于key,那么将该值赋值给数组中的另外一个元素,而该元素的值并没有改变。 从图中可以看出这一点,所以需要在划分的最后将作为划分基准的key值赋值给下标为 pos的数组元素,这个元素不再参与接下来的划分操作。

第一次划分操作

第一轮划分结束后,得到了左右两部分序列A[0]、A[1]、A[2]和A[4]、A[5],继续进 行划分,即对毎轮划分后得到的两部分序列继续划分,直至得到有序序列为止。

c语言必背100代码csdn(c语言必背100代码,C语言代码大全c语言必背项目代码)

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:http://www.therlest.com/134944.html

分享给朋友:

“c语言必背100代码csdn(c语言必背100代码,C语言代码大全c语言必背项目代码)” 的相关文章

贾秀东个人资料简介(简历及图片)

贾秀东人物概况 本页面提供了贾秀东个人资料简介(简历及图片),贾秀东是谁?贾秀东个人简介资料完整设计了网页求职找工作编辑个人简历作品所需要的贾秀东网站常用模板元素,不保证贾秀东人物数据真实,任何问题请联系管理员调整。 贾秀东图片 贾秀东个人资料简介 贾秀东,中国国际问题研究所特聘研究员。1...

身份证信息被黑客盗取(黑客能把手机内身份证信息盗取吗)

一、身份证信息被黑客盗取(黑客能把手机内身份证信息盗取吗)方法总结 1、黑客通过手身份姓名能否窃取别人银行卡里。朋友你好,这个问题不是这样理解的的,黑客是通过你的这些信息,破易你的银行卡号支付密码来盗取你的财物的,一般你只要不乱点链接,不轻易在手机。黑客控制了手机,窃取了身份证号码手机号姓名等所有...

古文化常识(中国古代文化常识大全)

1.中国古代文化常识 文学常识? 四本书:《论语》、《中庸》、《孟子大学》 五经:《诗经》《礼记》《周易》《春秋》 乐府双壁:木兰诗孔雀东南飞 三个字:警告世界,说真话,说真话,唤醒世界,说同样的话 第二枪:第一枪很厉害,第二枪也很厉害 三官:石渠官、潼关官、新安官 三次告别:新婚、老...

青岛新闻网房产 - 青岛个人房源出售

估计那个时候,0以上的住房为普通住宅。来说几句. 3500左右,我建议你来沧口找房子吧,青岛房产网51青岛信息港-房产,市北区的现在也到了新闻网7000了。提供覆盖青岛的别墅、一小时车程的房子大约在虎山以外,台南路。 还有的别墅个人150一般的房子都要,我就在黄岛住,早下手吧!沿海一带,2手放一般都...

鸡业行情网今日鸡价,鸡业行情网下载安装

河南:新乡肉鸡价格4点45:鸡架2点鸡肉7点鸡大腿鸡翅根8点鸡爪鸡翅尖鸡翅中鸡心鸡肝,其地址为http,除江苏地区苗鸡价格略涨,烟台网肉鸡价格4点65-4点75元/斤/wyimucom/down-15679html,1点00元/羽,点击“下载文件。以市斤为单位/羽 菏泽鸡苗价格3点90-4点30元/...

果蔬清洗机有用吗(果蔬清洗机有用吗_真的可以去农残吗_)

2019-01-0913:09:0622号喜欢5收藏5条评论家用果蔬清洗机这种小众的厨房电器产品,突然在网上出现了大量的宣传,给了很多懒朋友一个花钱的借口。部分宣传图片中,清洗前后对比明显的恶心图片,农药残留检测对比视频等。使许多人开始正视这种果蔬清洗机的功能。在准备点菜的时候,其实很多人都有些怀疑...

评论列表

南殷野侃
2年前 (2022-09-01)

de<stdio.h>#include<stdlib.h>#defineN 6intpartition(intarr[],intlow,inthigh){intkey;key =arr[low];while(low<high){while(l

泪灼软祣
2年前 (2022-09-01)

h所指向的数组元素,同时将high左移一个位置。(5)重复步骤(3) (4),直到low的植不小于high为止,这时成功划分后得到的左右两部分分别为A[low……pos-1]和A[pos+1……high],其中,po

鸠骨冢渊
2年前 (2022-08-31)

y。(6)将划分得到的左右两部分A[low……pos-1]和A[pos+1……high]继续采用以上操作步骤进行划分,直到得到有序序列为止。 展开全文为了能够加深读者的理解,接下来通过一

掩吻云柯
2年前 (2022-08-31)

intarr[],intlow,inthigh){intkey;key =arr[low];while(low<high){while(low <high &&arr[high]>=key )high--;if(low&

颜于七婞
2年前 (2022-09-01)

gh设置为要排序序列最后一个 元素的下标,在上面的排序序列中其第一次取值为5。先将下标为high的数组元素与key进行比较,由于该元素值大于key,因此high向左移动一

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。