C++编程《第18课 桶排序及其应用》教学课件.pptxVIP

  • 0
  • 0
  • 约2.17千字
  • 约 29页
  • 2026-03-10 发布于广西
  • 举报

C++编程《第18课 桶排序及其应用》教学课件.pptx

第18课;学习目标;知识讲授;桶排序;桶排序过程演示;桶排序应用;桶排序去重过程演示;课堂练习;【描述】有n个正整数,数字范围在1~10000之间,请你将这n个数字从小到大输出。n=100000000。

【输入】输入共2行,第1行是n。第2行是n个整数.

【输出】1行。所有整数从低到高排序后的结果。

;参考代码;【描述】现在有n个整数,范围在-1000~1000,请你设计程序,将这些数据排序后从大到小输出。请使用桶排序。n=100000000。

【输入】输入共2行,第1行是n。第2行是n个整数.

【输出】1行。所有整数从高到低排序后的结果。

;参考代码;【描述】小明所在的学校近期统计了师生的年龄数据,教务处主任希望你帮忙把这些年龄按从小到大的顺序排序,重复的年龄只保留一个。作为编程小高手的你能帮他解决这个问题吗?

【输入】输入共2行,第1行是n。第2行是n个整数.

【输出】1行。所有整数去重后从低到高排序后的结果。;参考代码;【描述】北京市中小学刚刚结束期中测试,信息学老师想统计全市学生信息学成绩的得分情况,即某些分数的人数,以便改进教学内容和方法,提高同学们的信息学成绩,同学们写个程序,帮助老师实现吧。

【输入】输入共3行,第1行是n和k。第2行是n个整数,第3行是k个得分;

【输出】1行k个整数,分别为k个得分的人数;;参考代码;排序选做题选讲;【描述】一个n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n-1]之间的所有整数,则称之符合“欢乐的跳”。如数组1423符合“欢乐的跳”,因为差的绝对值分别为:3,2,1。

给定一个数组,你的任务是判断该数组是否符合“欢乐的跳”。

【输入】每组测试数据第一行以一个整n(1≤n≤1000)开始,接下来n个空格隔开的在[-10^8,10^8]之间的整数。;【样例解释】

1423一共四个数字,先计算相邻元素差的绝对值

|1-4|=3;|4-2|=2;|2-3|=1;

n个元素,n-1个绝对差值。n=4,n-1=3,正好是123三种数字每个都有。所以是Jolly。

1、如何计算差值的绝对值

n-1个差值,从第1个元素遍历到第n-1个元素。用另外一个新数组存储每个差值即可。可以调用cmath库的绝对值??数intabs(intn),也可以自己写if-else语句求绝对值。

for(inti=1;i=n-1;i++)b[i]=abs(a[i]-a[i+1]);//空间开够;2、如何判断1到n-1之间正好每个数字只有一个?

对于乱序的序列,排序后就是唯一的。比如以下两个序列:

124369875和879645231排序后都是

123456789,1~9每个数字正好一个。因此这两个序列其实都是合适的。

为什么不用桶排?——因为数字不多,但数值太大,桶子用的内存太多啦!

sort(b+1,b+1+n-1);//比赛是允许直接sort的,项目较大,现在起可以不自虐啦!

3、怎么判断序列属于Jolly?

排序后,必须有b[1]==1,b[2]==2,....,b[n-1]==n-1;任意一个关系不满足则不合法;

注意逻辑,参照质数判断的逻辑。;参考代码;【描述】设有n个正整数a1,a2,a3,...,an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

【输入】第一行有一个整数,表示数字个数n。第二行有n个整数,表示给出的n个整数ai。

【输出】一个正整数,表示最大的整数.注意结果可能会很长,比如一个100位的数。;猜测:

1、两个数字如果看成字符串那么:

a、长度长的大

b、两个一样长的数,字典序大的大(高位数越大,数字越大)

2、20个以内的数字拼数,首先拼接后的数字数位是一定的,那么拼接后要求字典序最大。那么我们把字典序大的数字放前面。

3、如果出现这样的现象怎么办:32和321应该怎么拼接?

如果一样长,明显把字典序大的放前面好,但32和321相比321字典序更大,但是32放前面拼成32321比32121大。所以我们换一个思路:用插入排序的思想来模拟拼数过程。;举例:

321232113四个数字拼数,插入三次:

1、32

2、3212——因为3212和1232相比,3212更大

3、3232112——从后往前插入,32112比12321大,放在12前。32321比32121大,无法放更前。只能插入到此。

4、32321

文档评论(0)

1亿VIP精品文档

相关文档