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

c语言上,冒泡排序法、顺序排序法有什么好的办法记忆啊,老是忘记。_百...

发布网友 发布时间:2024-10-02 15:39

我来回答

2个回答

热心网友 时间:2024-10-03 17:12

建议你记方法 不要记程序 要用的时候根据方法自己写程序 或许每次写的程序都不同 但是只要方法对 都是可以高效运行的

如果死记程序 那么以后遇到复杂度更高的堆排序多路归并等外部排序的话 困难会更大

热心网友 时间:2024-10-03 17:14

有点长、、、、

冒泡排序的理解方法

比如, 有这么一个数组 :int a[3] = {3,2,1};

先不考虑怎么对这个数组进行排序,我们先拿数组a中的3 和 2 进行比较,先让3和2的位置对调先。 

代码如下 :

#include <stdio.h>

int main(void)
{
int a[3] = {3,2,1};

for (int i=0; i<3; i++)
{
if (a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}

for(int k=0; k<3; k++)
{
printf("%d\n", a[k]);
}

return 0;
}

我们来分析下这个代码, 先看for 循环执行一次后。数组a的元素位置发生了什么变化?
可以很容易的看出,第一次for 循环,只是拿了 3 和 2 进行对比, 3 > 2, 它们的位置当然得对调了。
第一次执行for 循环数组内部变为如下 :
2,3,1

然后for循环继续,i变成了1。 现在的a[i] 是3,对吧?自然的a[i+1]就是1了。那么,3>1
它们的位置当然也得对调。

第二次执行for 循环数组内部变为如下 :
2,1,3

然后for循环继续,可以看出,第三次的for 循环是多余的。因为3已经和后面的全部数字进行对比过了。所以,这个for 循环我们应该这样才正确, 如下 :

for (int i=0; i<3 - 1; i++)

3 - 1 就是数组的长度减1。

好了,现在的数组内部的顺序变成了这样了 :

2,1,3

可以看到,如果可以在执行多一次for 循环, 2 和 1 对比, 在对调2 和1的位置。那么这个程序就完成了排序的功能了。
那怎么修改这个程序,让它在执行多一次for 循环呢?
很简单, 只要在for 循环外面弄多一个for 循环, 让它执行内部的for 循环2次, 就可以了。 如下 :

for (int j=0; j<3-1; j++)//外面for 循环要3 - 1, 和上面的原因一样。
{
for (int i=0; i<3-1; i++)//这里要减j,是因为最后一个数3是不用在和其它数进行对比
{
if (a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}

整体的代码如下 :

#include <stdio.h>

int main(void)
{
int a[3] = {3,2,1};

for (int j=0; j<3-1; j++)
{
for (int i=0; i<3-1-j; i++)
{
if (a[i] > a[i+1])
{
int temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
}

for(int k=0; k<3; k++)
{
printf("%d\n", a[k]);
}

return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
招商银行的美元天添金怎么样? 天添美蒸馒头为什么开裂呢 上海食堂送菜 邮政跨地区取款手续费多? 谁能告诉我邮政储蓄卡跨省取钱要不要收费啊? 自贡市龙盛世纪仿真模型制造有限公司公司简介 学PS真的很难吗 红烧萝卜牛筋 微信怎么转发公众号部分内容 转发公众号部分内容方法 微信公众号内的视频如何下载?一个F12搞定 脚趾2345没有属于几级残疾? 铁程赛思押题准不准? 石嘴山兴铁程技术服务有限公司怎么样? 你好,向你请叫一下怎么查到当地的移动电话号码 我手机上刚下载了移动营业厅,我想问我老公的号码我可以查询码? 雪花算法:分布式唯一ID生成利器 ...通过中介卖给别人,当时约定1年后过房户,但现在他拖着不过户... 买房子的人拖着不过户而让卖房人再买房贷款利息多付利息怎么办?_百度... ASP.NET Core中使用固定窗口限流 分布式ID生成之雪花算法详解 福建晋江到浙江新昌坐动车要怎样买到什么车站最方便 从福建龙岩到浙江新昌最便宜的走法 有新昌到福州的长途汽车吗 ?在哪里坐车 。怎么联系。 实用的抗菌哑光墙面漆有哪些优点 亚光墙面漆的优点和缺点 墙面漆亚光的好还是光亮的好 昌都邦达机场的取得荣誉 昌都邦达机场改建工程 昌都邦达机场建设过程 神火手电从贵到贱的型号排序是什么?什么牌子的什么型号的强光手电性价... mysql执行报错如下:这种sql语句应该怎么写,a表是主表,b表是细表,a表... 求助、新浪微博密码忘记了,该如何找回密码?急急急、、、拜托各位... ...WINDOWS不启动。密码忘记如何解决。拜托各位大神 ...没有绑定QQ,可是忘记密码了,怎么找回密码,拜托了各位 谢谢... ...间与世隔绝的感觉!拜托各位高人指点一下怎么样才能找回 山东招生考试院的夏季高考找回密码系统什么时候再开启 急等,事关重... ...码都忘记了要怎么才可以找回以前的QQ啊?拜托各位了 3Q ...后面输对的也没有用了 怎么办?拜托各位了 3Q 暑假生活远去了 作文结尾 高中作文 会流水远去范文800 远去的夏天_作文 远去的记忆500字小学作文 银河系会不会有合适人类居住的星球 酸菜鱼的佐料哪个牌子好吃 重庆特色餐饮连锁加Ǜ 金矿石中提取金的五种方法哪种最常见? air pods数据线是什么接口? 悦迪airX耳机充电盒怎么充电 ...中秋放假安排表 2023今年中秋节和国庆节怎么放假 鱼缸里有水蜗牛好不好能不能净化水质 水蜗牛能净化水质吗