将数组{8,23,4,16,77,-5,53,100}中的元素按从大到小的顺序排列,最少需要交换几次?我知道答案是5次

但是为什么呢?... 但是为什么呢? 展开
 我来答
娱乐小八卦啊a
高粉答主

2020-03-04 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117813

向TA提问 私信TA
展开全部

这是用了冒泡排序的知识点。

思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

(1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。

(2)比较第2和第3个数,将小数 放在前面,大数放在后面。

......

(3)如此继续,知道比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。

(4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。

(5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。

(6)依次类推,每一趟比较次数减少依次。

扩展资料

算法分析:

(1)由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。

(2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面。

第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。

(3)时间复杂度

1、如果数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。

2、如果很不幸数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。

松甜恬0Je4ba
推荐于2017-10-07 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3288万
展开全部
第一次 77 和53交换
8 23 4 16 53 -5 77 100
第二次 53 和-5交换
8 23 4 16 -5 53 77 100
第三次 23 和-5交换
8 -5 4 16 23 53 77 100
第四次 8 与4交换
4 -5 8 16 23 53 77 100
第五次 4与-5 交换
-5 4 8 16 23 53 77 100
(每次从前面(未排好序的元素)选取最大的元素进行交换)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bdae756
2022-08-16
知道答主
回答量:9
采纳率:0%
帮助的人:3479
展开全部
注意审题:“从大到小的顺序排列”
来源:NOIP2008提高组初赛
按每个数为第几大排序得出序列:6 4 7 5 2 8 3 1
5次变换后分别为:
1 4 7 5 2 8 3 6
1 4 3 5 2 8 7 6
1 4 3 5 2 6 7 8
1 2 3 5 4 6 7 8
1 2 3 4 5 6 7 8
资料来源:自己想的,枚举
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式