根据给定的信息,我们可以提取并总结出以下几个关键的IT知识点: ### 1. 折半查找法(二分查找) #### 实现方式 折半查找法可以采用**循环**和**递归调用**两种方式来实现。 ##### 循环方式实现 在循环方式下,算法通过不断缩小查找范围来寻找目标值。初始时,查找范围为数组的全部元素。每次比较中间元素与目标值,根据比较结果调整查找范围,直至找到目标值或查找范围为空。 ```c int two_search(int start, int end, int val) { while (start <= end) { int mid = (start + end) / 2; if (data[mid] == val) return mid; else if (data[mid] < val) start = mid + 1; else end = mid - 1; } return -1; } ``` ##### 递归方式实现 递归方式则是将查找问题分解为子问题,每次递归地缩小查找范围,直到找到目标值或者查找范围缩小至空集。 ```c int two_search(int start, int end, int val) { if (start > end) return -1; int mid = (start + end) / 2; if (data[mid] == val) return mid; else if (data[mid] < val) return two_search(mid + 1, end, val); else return two_search(start, mid - 1, val); } ``` ### 2. 直接插入排序法 #### 算法原理 直接插入排序是一种简单的排序算法,其基本思想是:将数组中的元素逐个插入到已排序的序列中,使得插入后的序列仍然保持有序状态。具体步骤如下: 1. **初始化**:假设数组的第一个元素已经排好序。 2. **遍历数组**:从第二个元素开始遍历数组。 3. **插入操作**:将当前元素与前面已排序的元素进行比较,如果当前元素较小,则向前移动已排序元素,为当前元素腾出位置,然后将当前元素插入到合适的位置。 4. **重复步骤2-3**:直到所有元素都被插入到正确的位置为止。 #### C语言实现 ```c void insert_sort(int arr[], int n) { int i, j, key; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; /* Move elements of arr[0..i-1], that are greater than key, to one position ahead of their current position */ while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } ``` ### 3. 排序算法的应用 #### 举例说明 在给定的部分代码示例中,使用了`selectsort`函数实现了选择排序算法,并且使用`halfind`函数实现了折半查找。这两个函数的结合使用展示了如何先对数据进行排序处理,然后再进行高效的查找操作。 #### 选择排序 选择排序的基本思路是:每轮从未排序的序列中找出最小的元素,将其放到已排序序列的末尾。这样,每轮过后已排序序列会增加一个元素,未排序序列会减少一个元素,最终整个数组就排序完成。 ```c void selectsort(int a[], int n) { int i, j, min_idx; for (i = 0; i < n - 1; i++) { min_idx = i; for (j = i + 1; j < n; j++) { if (a[j] < a[min_idx]) { min_idx = j; } } swap(&a[min_idx], &a[i]); } } void swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } ``` #### 折半查找 折半查找要求待查找的数组必须是有序的。首先确定中间元素与目标值的关系,根据关系决定是在前半部分还是后半部分继续查找,不断缩小查找范围直至找到目标值。 以上就是根据给定文件内容所整理出的关键IT知识点,包括折半查找的不同实现方法、直接插入排序法的具体实现以及排序算法在实际应用中的结合使用。

















//二分查找法循环实现
#include <stdio.h>
#define SIZE 10
int data[SIZE] = {1, 3, 4, 6, 7, 9, 10, 11, 45, 100};
int main(void)
{
int val = 1;
int po = -1;
int start = 0, end = SIZE -1;
do {
if (start > end) {
po = -1;
break;
}
po = (start + end) /2;
if (data[po] > val) end = po;
if (data[po] < val) start = po;
if (data[po] == val) break;
}while(1);
if (po != -1) printf("Search %d complete!", data[po]);
}
//二分查找法递归实现
#include <stdio.h>
#define SIZE 10
int data[SIZE] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int step = 0;
int two_search(int start, int end, int val);
int main(void)
{
int val = 60;
int p = two_search(0, SIZE-1, val);
if (p != -1) printf("Search %d value by %d step!\n",data[p], step);
return 0;
}
int two_search(int start, int end, int val)
{
step++;
int p = 0;
if (start == end) {
if (data[start] == val) return start;
剩余5页未读,继续阅读

- tolilei2013-09-04算法中蛮重要的,不知道是不是我需要的
- irishcoffeema2013-03-17和题目描述不一致
- wywdjc2012-07-22什么呀?!不是插入排序啊,是选择排序吧
- cute流氓兔2013-12-10很好的算法,很有参考价值!!!

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 我的人工智能学习路线:数学基础、机器学习、深度学习、Python、图像处理、计算机视觉
- (源码)基于Java和Spring Boot框架的热门网游推荐网站.zip
- 使用深度学习的方式破解宝塔控制面板的验证码服务
- 基于深度学习的口罩佩戴检测,Keras-YOLOv3 实现
- Jiagu深度学习自然语言处理工具 知识图谱关系抽取 中文分词 词性标注 命名实体识别 情感分析 新词发现 关键词 文本摘要 文本聚类
- 精通NGINX:从基础到高级实践
- 现浇钢筋混凝土排水沟施工技术交底.doc
- 斐讯ENT网络管理系统产品介绍.docx
- 教育培训机构新薪酬制度参考.doc
- 网络互联技术PPT第5章网络安全技术.ppt
- 信息化让企业文化执行更精确-.doc
- 建筑工程质量策划书.doc
- 4.6.5.1手术预防性抗菌药物临床应用管理制度与规范.doc
- 青少年学生网络成瘾现状与对策研究应用.doc
- 远卓-清华万博网络技术有限公司管理咨询-远卓.pptx
- 网站建设合同书.doc


