算法读资料总结(2)

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转化为整数

 

在涉及到这些算法时,如果不运用,是很难掌握的。所以还是尽可能的多敲,多运用,所以不说了抓紧敲代码去了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值