快排和二分查找
来源:互联网 发布:单片机电机驱动 编辑:程序博客网 时间:2024/04/28 11:53
我只是课本的搬运工,做做笔记,当练打字也可以。这里我把qsort放前面讲是因为bsearch在使用之前需要对数组进行排序,排完后才能进行查找。老师说学了快排之后就不要用冒泡排序法和选择排序法了,然而我选择排序还不太会,找个时间整理整理吧。
快速排序
qsort函数:
头文件:<cstdlib> 或<search.h>
功能:对具有num个元素,每个元素占width字节的数组base按升序进行快速排序,并用排序后的数组覆盖该数组。compare函数介绍见二分查找。
函数原型:
void qsort(void * base,size_t num , size_t width , int(cdecl*compare)(const void*elem1 , const elem2));
Qsort 使用实例:
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
int compare(const void*a, const void*b)
{
return strcmp((char*)a, (char*)b);
}
int main()
{
char list[5][4] = { "cap", "car", "cab", "can", "cat" };
qsort((void*)list, 5, sizeof(list[0]), compare);
cout << "排序后的数组:" << endl;
for (int i = 0; i < 5; i++)
cout << list[i] << '\t';
cout << endl;
}
二分查找
bsearch函数:
头文件:<cstdlib> 或<search.h>
功能:对具有num个元素,每个元素的宽度为width字节的已排序的数组进行二分查找。
函数原型:
Void * bsearch (const void * key , const * base , size_t num , size_t width , int (cdecl * compare)(const void * elem1 , const void * elem2));
分析:
key为查找关键字,base为指向查找对象的指针(地址),num为查找对象的元素个数,
Width为元素所占的字节数,elem1为查找的关键字的指针,elem2为与关键字比较的数组元素的指针,compare为比较两个元素elem1和elem2的函数。
在查找中调用compare函数一次或多次,每次都自动传送两个数组元素的指针。Compare函数比较这两个元素的大小(之所以能比较,是因为用了strcmp()函数),返回如下值之一:
( 补充说明:
strcmp() 比较两字符串的大小
)
<0 elem1小于elem2
=0 elem1等于elem2
>0 elem1大于elem2
函数返回查找指针。如果查找成功,查找指针指向key,如果查找失败,查找指针为NULL。如果查找对象(数组)未排序或包含相同的关键字,其执行结果不可预料。
Bsearch使用实例:
#include<iostream>
#include<cstdlib>
#include<string> //为strcmp()函数提供原型
using namespace std;
int compare(const void *a,const void *b)
{
return strcmp((char*)a, (char*)b);
}
int main()
{
char list[5][4] = { "cab", "can", "cap", "car", "cat" };
if (bsearch("cab", (void*)list, 5, sizeof(list[0]), compare) != NULL)
cout << "该关键字在数组中存在!" << endl;
}
- 快排和二分查找
- 快排 + 二分查找
- 快排,二分查找
- 快排,二分查找
- 快排&归并&二分查找
- 字符串查找(二分和快排的运用)
- SDUT2040 快排与二分查找
- 二分查找与快排算法
- python 实现快排及二分查找
- 【顺序查找表】 包含顺序查找和二分查找,顺手加入了快排
- 面试题目-堆排、快排、二分查找
- Java基础算法:堆排,快排,二分查找
- sort(排序) qsort(快排) bsearch(二分查找)
- SDUT 1500 Message Flood (快排+二分查找)
- 二分查找 归并排序 快排 详解C++
- 快排 + 二分
- 二分 + 快排
- 剑指Offer面试题8旋转数组的最小数字(二分查找)附带快排和按年龄排序
- 高并发架构以及处理高并发的常见方法
- leetcode-217. Contains Duplicate
- 第九周上机时间项目——项目1-深复制体验
- android view的生命周期
- float实现横向导航
- 快排和二分查找
- runtime - UIButton点击事件重复处理
- C++文件操作
- Root Motion的脚本处理
- 缓存服务器设计与实现(一)
- java中关于异常得相关知识整理
- 调用相机--下面的 取消和使用是英文
- hdu1236排名
- javaScript封装的常用函数(持续更新中)