搜索和排序简单概念

 查找:

1、线序查找 Linear Search
线序查找是一种简单的查找方式,是按顺序在数据集合中查找的方式,适用于小数量的数据集合,遍历所有的值,直到找到所找的值。优点:不要求数据存放格式。缺点:只适合小数量的数据集合。STL中find函数执行线序查找,原型为InputIterator find ( InputIterator first, InputIterator last, const T& value );前两个参数是查找数据集合的迭代器,fisrt是开始的迭代器,last是终止的迭代器,这两个参数确定了查找的范围。
最后一个参数为要查找的数据。
如果没有找到,函数返回指向终止点的迭代器。如果找到,函数返回指向查找点的迭代器。
2、二分查找 Binary Search
二分查找适合于任何有序数据集合的查找。方法:1、找到数据集合中间的数据2、由于这是有序的数据集合,假设从左到右一次增大,则把要查的值与中间值判断,如果要查的值大于中间值,则只考虑中间值的右边,否则查找中间值的左边,不用考虑另一边的情况。3、然后在步骤2找到的更小的数据集合
重复步骤2,直到找到要找的数据。优点:适合于任何集合;缺点:集合必须为有序的。二分查找特别适合于大数据量的数据集合。STL中binary_search函数执行二分查找,原型为:
template <class ForwardIterator, class T>
  bool binary_search ( ForwardIterator first, ForwardIterator last,
                       const T& value );
first,last是数据集合的迭代器,fisrt是开始的迭代器,last是终止的迭代器,这两个参数确定了查找的范围。最后一个参数为要查找的数据。
template <class ForwardIterator, class T, class Compare>
  bool binary_search ( ForwardIterator first, ForwardIterator last,
                       const T& value, Compare comp );
两个函数都是返回bool型的值,如果找到,就返回true,否则返回false。
 
前3个参数的解释与上边的解释相同,最后一个参数为比较的函数。
排序:
1、Selection Sort 选择排序
简单的说,就是把每个数据放到应该存放的位置。
方法:
1、创建两个指针,第一个指针指向第一个值,第二个指针指向第二个值,把第一个指针指向的值假设为最小值。
2、第二个指针浮动,从当前位置浮动到最后一个,每次比较第二个指针指向的值与最小值,如果第二个指针指向的值比最小值小,则更换最 小值,否则第二个指针向后浮动。
3、找到最小值,然后把最小值放到第一个指针指向的位置,然后第一个指针向后移动。
4、重复2、3不,不过每次重复的初始状态时,第二个指针初始为第一个指针的后边,作为浮动的初始位置,每次重复完,第一个指针向后移 动一位。
每次重复总能找到第二指针浮动范围的最小值,然后依次存放。这样最后就能把数据集合给从小到大排序了。
特点:
1、由于不知道数据集合是否已经排好序,必须每次把集合排序一遍,即使数据集合已经排好序,这也是选择排序的缺点之一。
2、QuickSort 快速排序
QuickSort利用分而治之(divide-and-conquer)的思想,并且使用迭代的思想,即把集合分为许多很小的部分,然后对这些小的部分排序,最后组合在一起,构成一个有序的集合,每次分割,就是迭代。
方法:
1、判断数据集合大小是否为0或者为1,是的话返回数据集合,作为最基本情况。
2、选择一个数据作为节点元素。
3、创建两个新的数据集合,把小于节点元素的所有数据放到一个数据集合,把大于节点元素的所有数据放到另一个数据集合。
4、分别在第一二个数据集合中进行1、2、3步骤,直到每个数据集合大小为0或1。
5、把分割的数据集合和节点按顺序排序,就形成了一个有序的集合。
一般情况下,节点元素选为中间点元素。
考虑这种情况:当选择的节点元素为最小值元素或最大值元素,那么将有一个数据集合没有元素,但是程序还需要去遍历,那么就会降低程序的执行效率,所以这种情况必须避免。有一种选择节点元素算法:median-of-three partitioning,避免了上述所说的情况。
STL中sort函数执行快速排序,适用于vector, deque, string,不适合于list。
原型:
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
first,last是数据集合的迭代器,fisrt是开始的迭代器,last是终止的迭代器,这两个参数确定了查找的范围, 最后一个参数为比较的函数。
list是用list的sort()函数,即list.sort().
先到这吧~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概念设计】 图书管理系统是一种基于计算机网络技术的管理系统,主要用于对图书馆中的图书进行管理和维护。其主要功能包括图书信息的录入、借阅、归还、查询、统计等。 该系统应具有以下特点: 1. 界面友好:系统应该具有简洁、直观的操作界面,用户可以通过简单的操作完成各种任务。 2. 数据安全性:系统应该具有数据备份、恢复、安全性等功能,保障数据的安全性和完整性。 3. 多用户支持:系统应该支持多个用户同时登录,并具有不同的权限和角色。 4. 高效性:系统应该具有高效的查询和检索功能,能够快速响应用户的请求。 【逻辑设计】 1. 用户管理:包括用户注册、登录、修改密码等功能。系统可以通过用户身份验证确保用户的合法性。 2. 图书管理:包括图书的添加、修改、删除等功能,同时支持对图书的分类、排序搜索等操作。 3. 借阅管理:包括借阅记录的添加、修改、删除等功能,同时支持借阅期限的控制和逾期处理。 4. 归还管理:包括归还记录的添加、修改、删除等功能,同时支持逾期罚款的计算和收取。 5. 统计分析:包括对图书借阅情况、用户借阅情况、图书流通情况等数据进行统计和分析,提供数据报表和分析结果。 6. 系统管理:包括系统设置、备份、恢复、日志管理等功能,保障系统的安全性和稳定性。 以上是一个简单的图书管理系统的概念设计和逻辑设计,具体实现还需要根据实际需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值