1、排序
排序题中的大部分都只需要得到排序的最终结果,而不需要特意的排序的完整的过程(例如冒泡,快排等),因此C++中的sort函数就完美的契合了这一点,这将有助于我们把更多的经历放在题目的逻辑本身上。在对学生成绩排序时,如果两人成绩相同,则按照姓名的字典顺序进行排序。这里又引入了另外的函数--strcmp
strcmp函数
他是头文件string.h下的用来比较两个char类型的字典序大小,其中strcmp(str1,str2)当str1的字典序小于str2时返回一个负数,当str1的字典序等于str2时返回0,当str1的字典序大于str2时返回一正数。与上次资料说到的cmp函数结合,就能很容易的实现学生成绩出现相同时的排序。
bool cmp(Student a,Student b)
{
if(a.sore !=b.score) return a.score> b.score;
else return strcmp(a.name, b.name)<0;
}
2、散列
散列(hash)是常用的算法思想之一,简单的来说就是:”将元素通过一个函数转化为整数,使得该整数可以尽量唯一的代表这个元素“。散列函数 H,如果未转化前为key,那么转化后就为H。如果key为整数,可以用的散列方法有直接定地址法,平方取中法,除留余数法。最常用的散列的应用就是直接把key作为数组下标。但是当hash的值转化为相同值的时候就发生了冲突,为了解决这个问题,那就解决这个问题。
(1)、线性探查法 当得到一个H时,如果下个H与之相同,则检查第二个H+1是否被占用,如果没有则就使用这个位置;否则继续加一。
(2)、平方探查法 为了尽可能的避免扎堆,则可用H+1二次方,H+2二次方....
(3)、链地址法 与上面的方法不同,不需要创造新的hash值,而是把所有H相同的key连接成一条单链。
hash函数
字符串hash是指将一个字符串S映射为一个整数,使得整数可以尽可能唯一代表字符串。
int hashFunc(char S[] ,int len) //hash函数,将字符串S转化为整数
在涉及到这些算法时,如果不运用,是很难掌握的。所以还是尽可能的多敲,多运用,所以不说了抓紧敲代码去了。