- 博客(13)
- 收藏
- 关注
原创 【C/C++】快速排序(详细注释)含霍尔(hoare)法、挖坑法、单向指针法,三数取中、小区间优化、自省排序、递归改非递归
学习本章之前建议先学习。,这里提供一篇介绍插入排序的文章进行参考。
2024-09-05 17:44:57 821
原创 【C/C++】希尔排序(详细注释)
注意这里for循环中的i是每次增加1,虽然i是依次往后走的,但是每次进行排序的都是被划分到不同组的数据。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后取,重复上述分组和排序的工作。希尔排序的这种分组是有可能把数组内相同值划分到不同的组内的,从而导致他们的相对位置发生改变,所以希尔排序是不稳定的。希尔排序实际就是优化的插入排序,可以看到中间的代码跟插入排序的代码相似度是极高的,也就只是改了几个数。
2024-08-25 18:01:25 385
原创 【C/C++】插入排序(详细注释)
首先要明确稳定性的含义是指排序完成之后,数组中相同的数之间的相对位置是否发生了改变,如果相对位置没有发生改变则代表稳定性好,反之。(出现两个7是因为上一次的循环把数据往后移动造成的,作为tmp的数字5已经备份了起来,所以这里这样覆盖也不会出现问题)把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为。假如我们要升序排序下面的数据,那么现在5就是我们要排序的数,对应上方代码的tmp。的条件,于是乎结束循环并用之前tmp的值覆盖掉end+1指向的值。
2024-08-25 16:52:35 157
原创 【C++】面向对象之继承
继承的面向对象的特征之一,继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称子类或者派生类,而被继承的类就叫做父类或者基类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复⽤。
2024-08-14 17:23:56 704
原创 【C++】模板
使用模板也叫做泛型编程,这种写代码的方式可以大大增加代码的可复用性。比如我们有要用函数把两个数交换的需求,同时我们可能需要交换整形、浮点型等不同的数据,传统地来看我们需要为不同类型分别编写不同的交换函数。但是这些函数实现的功能都是交换两个数据,甚至代码长得基本都是差不多的,区别只在于定义数据的数据类型。就因为这一点点的区别而写很多个相似的代码实在是太挫了。于是我们就可以使用模板来完成上面的需求。
2024-07-20 23:55:53 156
原创 【C++类】关于类的定义
class A //class + 空格 + 类名 + {};char c;public://无参构造函数A()//有参构造函数定义方式很简单,如上。需要注意的是 “}” 的后面一定要跟一个 “;”,否则会导致编译失败,而如Java等其他一些语言则不需要跟这个 “;并且一般建议令成员变量被private修饰,成员函数则根据其功能考虑要用public还是private修饰。public(公用):权限范围最大,在任何地方都可以访问到该作用域下的成员。
2024-07-20 12:42:49 271
原创 带环链表的讨论
让快慢指针都从链表的头节点开始走,快指针每次走2步,慢指针每次走1步。当快慢指针相遇确定带环之后让快指针回到链表的头节点,并让快指针也每次只走一步,这么一来当两指针再次相遇,相遇的位置就是环入口的位置。根据上面这一结论,我们知道fast指针和slow指针相遇的时候slow指针已经在环内走了k圈,那么再让slow指针走L步就能回到环的入口。假设链表头节点到链表的入口的距离为L,如果我们想要让一个指针走到链表入口,那么这个指针就要走L步或者L + k*C步。上面用的是快指针走2步,慢指针走1步。
2024-05-04 23:29:24 385 1
原创 【赛后总结】2024年PTA天梯赛
这里比较难理解的是“同向行走”这个词,在这题需要理解为:跟自己同一个方向的人。当时写这题的时候读题堵漏了,以为只用判断每个宫位有没有重复的数字。赛后才发现还得判断每行每列有没有重复的数字,导致怎么调试都调不对,浪费了很多的时间。这题考数学,在中学的时候老师有教过这种题,但我现在是大学生,只会按题目给的提示写公式,最终也只是过了部分样例。简单的小模拟,用数组存下每个种类的牛肉面,然后依次记录每种卖了几碗接着相加就可以了。感悟:会用的算法还是太少了,对STL中的map不够熟悉,需要多加练习。
2024-05-02 10:50:28 381 1
原创 【STL使用笔记】set_union,set_difference,set_intersection使用需要注意的细节
class stupublic:bool operator<(const stu& s)//一定要自行重载“<”运算符,否则会因为没有合适的比较方法而报错int num;int main()//该方法不需要自行开辟目标容器的大小,或者说不能手动提前开辟it!++it)cout << "姓名:" << it->name << " 学号:" << it->num << '\n';return 0;对于自定义类型推荐使用这种方法,不需要想目标容器需要开到多大。
2024-02-06 22:59:30 264 1
原创 程序运行结果不符合预期之后的解决思路(个人经验分享)新手入门调试技巧
1.数值精度发生差别2.生成了一个不应该生成的很大很乱的数3.数值与差别较小4.死循环5.打印类型和打印目标类型不匹配6.其它
2023-11-23 00:45:38 670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人