搜索和排序简单概念

 查找:

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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值