预备役1(2021-11-23)

学习总结:

 1.今天总结了常用的三个排序,桶排,快排和选择排序。对于桶排来说,多用于记录出现的个数的题目,若是要对数组进行排序一般用冒泡,选择和快排,插排等。

首先是桶排:顾名思义,桶排就是用一个个桶来对每一个输入的值进行记录:

当输入结束时,对book数组的1-1000(这里假设只有1000个桶)进行打印(因为数组本身已经按升序排好,所以不必在进行排序),如果book[i]出现了几次,就打印几次:

接下来是完整代码:

样例:

 其次就是快排,对于快排来说是,时间复杂度为O(nlogn),因为其中用到了二分的思想,但是答主现阶段实力和时间有限,并没有深入了解为什么二分的时间复杂度为O(nlogn)。对于快排来说,就是把数组一分为二,用i,j两个变量分别从左边和右边进行寻找,像两个哨兵一样,以数组的第一个元素为基准数记为temp进行比较。这里要划重点,每一次比较都应以右边也就是j先与i移动,每次移动j--,当a[j]<temp时,停止往左走,在让i往右走,知道发现a[i]>temp时,停止往右走,交换此时i和j的位置对应的值。往复循环知道i和j相遇。代码如下:

 这里我们已经对于初始数组进行和第一次划分,也就是序列的左边都时小于temp的数,右边都是大于temp的数。但是我们此时还没有完成排序,因为左边可能为乱序,右边也可能为乱序。所以我们在重新设置基准数之后,分别对左边和右边在进行排序。即用递归在调用自己本身,达到目的。

接下来是完整代码:

样例:

2.最后就是总结一下今天对于字符串板块学到的的一些新知识。

对于字符串的删减和插入。对于删减,我们有两种思路,一是把满足删减条件的下表之后的值往前推一个,及覆盖掉当前下表。另一种是用一个新数组对原有数组进行处理,若是满足删减条件,则不存储,否则存储。这里答主用的第二种方式:

然后就是增加,其实增加和删减差不多,增加就是在满足条件的i的值之前先存储一个想要插入的字符,在存储数据。这里答主题目想要把数组中所有的字符前都插入一个字符’.‘,所以不需要判断条件:

既然是学习总结,当然少不了今天上机的菜鸟杯模拟题,对于今天的题目,我只想说,我真是个菜鸡。不过路漫漫其修远兮,还是希望自己能坚持下去,这也是我第一次写博客,感觉真的学到了许多,若有不足之处,还请各位看官大佬们多多海量,能够支持我的不足和需要改进的地方。谢谢各位~

猜你喜欢

转载自blog.csdn.net/qq_33302352/article/details/121504259