C语言基础(三十一)

1、线性搜索:

#include "date.h"
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  // 希尔排序  
void shellSort(int arr[], int n) {  for (int gap = n / 2; gap > 0; gap /= 2) {  for (int i = gap; i < n; i++) {  int temp = arr[i];  int j;  for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {  arr[j] = arr[j - gap];  }  arr[j] = temp;  }  }  
}  // 线性搜索并计算相同元素个数,打印序号  
void linearSearchAndCount(int arr[], int n, int target) {  int count = 0;  printf("Found at indices: ");  for (int i = 0; i < n; i++) {  if (arr[i] == target) {  printf("%d ", i);  count++;  }  }  if (count == 0) {  printf("Not found.\n");  } else {  printf("\nTotal occurrences: %d\n", count);  }  
}  // 打印数组  
void printArray(int arr[], int n) {  for (int i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  printf("\n");  
}  int main() {  int times = getTime();int n, target;  printf("Enter the size of the array: ");  scanf("%d", &n);  int *arr = (int *)malloc(n * sizeof(int));  if (arr == NULL) {  printf("Memory allocation failed.\n");  return 1;  }  srand(time(NULL));  for (int i = 0; i < n; i++) {  arr[i] = rand() % 100; // 假设生成0到99之间的随机数  }  printf("Original array: ");  printArray(arr, n); // 打印排序前的数组  shellSort(arr, n);  printf("Sorted array: ");  printArray(arr, n); // 打印排序后的数组  printf("Enter the target number to search: ");  scanf("%d", &target);  linearSearchAndCount(arr, n, target); // 线性搜索并打印结果  free(arr);  return 0;  
}

运行结果如下:

 

2、二分搜索:

#include "date.h" 
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  // 希尔排序  
void shellSort(int arr[], int n) {  for (int gap = n / 2; gap > 0; gap /= 2) {  for (int i = gap; i < n; i++) {  int temp = arr[i];  int j;  for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)  arr[j] = arr[j - gap];  arr[j] = temp;  }  }  
}  // 线性搜索计算相同元素  
int countAndPrintSame(int arr[], int n, int target) {  int count = 0;  int firstIndex = -1;  for (int i = 0; i < n; i++) {  if (arr[i] == target) {  if (firstIndex == -1) firstIndex = i;  count++;  }  }  if (count > 0) {  printf("Found %d occurrences of %d, first at index %d.\n", count, target, firstIndex);  } else {  printf("Element %d not found in the array.\n", target);  }  return count;  
}  // 二分查找  
int binarySearch(int arr[], int l, int r, int x) {  while (l <= r) {  int m = l + (r - l) / 2;  // 检查mid是否是要找的元素  if (arr[m] == x) return m;  // 如果元素小于mid,则它只可能出现在左子数组中  if (arr[m] < x)  l = m + 1;  // 否则,元素只能出现在右子数组中  else  r = m - 1;  }  // 如果到达这里,元素不在数组中  return -1;  
}  int main() {  int times = getTime();int n, target;  printf("Enter the number of elements: ");  scanf("%d", &n);  int* arr = (int*)malloc(n * sizeof(int));  srand(time(NULL));  printf("Generated array:\n ");  for (int i = 0; i < n; i++) {  arr[i] = rand() % 100; // 生成0到99之间的随机数  printf("%d ", arr[i]);  }  printf("\n");  shellSort(arr, n);  printf("Sorted array: \n");  for (int i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  printf("\n");  printf("Enter the element to search: ");  scanf("%d", &target);  int result = binarySearch(arr, 0, n - 1, target);  if (result != -1) {  printf("Element found at index %d.\n", result);  countAndPrintSame(arr, n, target);  } else {  printf("Element not found.\n");  }  free(arr); return 0;  
}

运行结果如下:

 

3、 插值搜索:

#include "date.h"
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
// 希尔排序对整数数组arr进行排序。
// 通过缩小增量序列(gap)逐渐逼近最终的排序状态。 
void shellSort(int arr[], int n) {  for (int gap = n / 2; gap > 0; gap /= 2) {  for (int i = gap; i < n; i++) {  int temp = arr[i];  int j;  for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {  arr[j] = arr[j - gap];  }  arr[j] = temp;  }  }  
}  
// 插值搜索是一种在有序数组中查找特定元素的算法,基于元素值分布的特性来预测目标值可能的位置,从而减少搜索空间。  
int interpolationSearch(int arr[], int n, int x) {  int low = 0, high = n - 1;  while (low <= high && x >= arr[low] && x <= arr[high]) {  if (high == low) {  if (arr[low] == x) return low;  return -1;  }  int pos = low + (((double)(high - low) / (arr[high] - arr[low])) * (x - arr[low]));  if (arr[pos] == x) return pos;  if (arr[pos] < x)  low = pos + 1;  else  high = pos - 1;  }  return -1;  
}  int main() { int times = getTime(); int n, i, searchValue;  printf("Enter the number of elements: ");  scanf("%d", &n);  // 动态分配内存  int *arr = (int*)malloc(n * sizeof(int));  if (!arr) {  printf("Memory allocation failed\n");  return 1;  }  // 生成随机数并填充数组  srand(time(NULL));  for (i = 0; i < n; i++) {  arr[i] = rand() % 100; }  // 打印原始数组printf("Original array: ");  for (i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  printf("\n");  // 对数组进行希尔排序shellSort(arr, n);  // 打印排序后的数组printf("Sorted array: \n");  for (i = 0; i < n; i++) {  printf("%d ", arr[i]);  }  printf("\n");  // 读取要搜索的值并进行插值搜索printf("Enter the value to search: \n");  scanf("%d", &searchValue);  // 插值搜索int index = interpolationSearch(arr, n, searchValue); // 遍历数组以计算并打印目标值的所有出现的位置。 if (index != -1) {  printf("Element found at index %d\n", index);  } else {  printf("Element not found\n");  }  // 如果搜索一个值,只要找到就打印。 // 计算出现次数,需要遍历数组。 int count = 0;  for (i = 0; i < n; i++) {  if (arr[i] == searchValue) {  count++;  printf("Found %d at index %d\n", searchValue, i);  }  }  printf("Total occurrences of %d: %d\n", searchValue, count);  free(arr);  return 0;  
}

运行结果如下:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413944.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧党建解决方案

1. 新时代党建工作背景 报告强调了新时代党建工作的重要性&#xff0c;提出要利用互联网、大数据等新兴技术推进智慧党建&#xff0c;提高党的执政能力和领导水平。 2. 基层党组织建设挑战 基层党组织在日常工作中面临组织管理难、过程监管难、宣传教育难等问题&#xff0c;…

2024年【四川省安全员B证】最新解析及四川省安全员B证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员B证最新解析是安全生产模拟考试一点通总题库中生成的一套四川省安全员B证考试资料&#xff0c;安全生产模拟考试一点通上四川省安全员B证作业手机同步练习。2024年【四川省安全员B证】最新解析及四川省安…

【卡码网C++基础课 14.链表的基础操作2】

目录 题目描述与分析代码编写 题目描述与分析 题目描述&#xff1a; 请编写一个程序&#xff0c;实现以下操作&#xff1a; 构建一个单向链表&#xff0c;链表中包含一组整数数据&#xff0c;输出链表中的第 m 个元素&#xff08;m 从 1 开始计数&#xff09;。 要求&#xf…

苹果笔记本电脑能不能玩游戏?苹果电脑玩游戏咋样?

过去Mac玩不了游戏最大的问题&#xff0c;就是图形API自成一体&#xff0c;苹果既不支持微软的DirectX&#xff0c;同时为了推广自家的Metal图形API&#xff0c;又对OpenGL和Vulkan两大主流的通用API敬而远之。游戏生态、硬件瓶颈让苹果电脑不适合玩游戏。 不过说到底&#xf…

【数据结构入门】二叉树之堆排序及链式二叉树

目录 前言 一、堆排序 1.概念 2.堆排序思想 3.具体步骤 4.实现 5.复杂度 二、堆的应用——TopK问题 三、链式二叉树 1.二叉树创建 2.二叉树遍历 1&#xff09;前序、中序以及后序遍历 2&#xff09;层序遍历 3.结点个数以及高度 1&#xff09;结点个数&#xff1a…

极狐GitLab 如何管理 Kubernetes 集群?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

Springboot中使用Elasticsearch(部署+使用+讲解 最完整)

目录 引言 一、docker中安装Elasticsearch 1、创建es专有的网络 2、开放端口 3、在es-net网络上安装es和kibana 4、可能出现的问题 5、测试 6、安装IK分词器 7、测试IK分词器 二、结合业务实战 1、准备依赖 2、配置yml 3、读取yml配置 4、准备es配置类 5、编写测…

【AI学习笔记】AIGC,AI绘画 ComfyUI+ComfyUI Manager安装

【AI学习笔记】ComfyUIComfyUI Manager安装 最近在面向BOSS直聘学习ComfyUI的使用&#xff0c;但是不出意外&#xff0c;因为学习者们迥异的电脑配置以及杂乱的AI软件工具包互相纠缠&#xff0c;跟人工智能相关的环境安装多少都会遇到点教程预料不到的BUG。 推荐入门教程&…

盛京银行营收、利润双降下的负重难行,症结在哪儿?

撰稿|芋圆 来源|贝多财经 盛京银行自2020开年始&#xff0c;经营业绩除了在2022年稍有回暖外&#xff0c;均处于营收、利润双降的局面。 2024年半年报显示&#xff0c;盛京银行的资产总额为10683亿元&#xff0c;规模较2023年末收缩1.1%&#xff1b;营业收入46亿元&#xff0…

如何在windows中使用hfd.sh aria2c下载huggingface文件

这里写目录标题 简介hfd.sh使用方法windows系统安装aria2c aria2c官方文档&#xff1a; https://aria2.github.io/manual/en/html/aria2c.html 简介 我们在下载huggingface上模型权重的时候&#xff0c;要么在浏览器上直接下&#xff0c;要么使用官方下载程序。浏览器上还得一…

easy_spring_boot Java 后端开发框架

Easy SpringBoot 基于 Java 17、SpringBoot 3.3.2 开发的后端框架&#xff0c;集成 MyBits-Plus、SpringDoc、SpringSecurity 等插件&#xff0c;旨在提供一个高效、易用的后端开发环境。该框架通过清晰的目录结构和模块化设计&#xff0c;帮助开发者快速构建和部署后端服务。…

应急响应-应急响应流程(各个阶段与实战)

目录 前言准备阶段检测阶段研判分析定损止损&#xff08;对应遏制、根除阶段&#xff09;定损止损 攻击还原清理恢复总结复盘实战讲解进程ssh暴力破解命令混淆派生恶意命令命令注入 网络文件webshellC2脚本木马 参考 前言 做入侵检测时会有一些攻击告警&#xff0c;需要做应急…

《神话:悟空》的破晓之路:文化深度与技术巅峰的交响乐章

在八月的炽热中&#xff0c;《黑神话&#xff1a;悟空》如同一道璀璨的光芒&#xff0c;划破了国产游戏的寂静夜空&#xff0c;不仅以其惊人的销量速度震撼了业界&#xff0c;更以其深厚的文化底蕴与顶尖的游戏设计&#xff0c;在全球玩家心中留下了不可磨灭的印记。这款游戏的…

鸿蒙XComponent组件的认识

概述&#xff1a; XComponent组件作为一种渲染组件&#xff0c;通常用于满足开发者较为复杂的自定义渲染需求&#xff0c;例如相机预览流的显示、游戏画面的渲染、自定义视频播放器等等。其中Native API是其核心内容&#xff01; 其可通过指定其type字段来实现不同的功能&…

入行「游戏策划」,该从何处下手?

想知道策划岗位该怎么入行可点击蓝链 相比较起以技术为最重要评判标准的开发岗&#xff0c; 「游戏策划」这一岗位在非业界人士的眼中 一直都是一个风评方差很大的岗位。 有人说策划岗又轻松又威风&#xff0c; 只需要输出想法&#xff0c;落地都交给开发&#xff0c; 干…

u盘pe怎么安装系统_u盘pe安装系统详细步骤

u盘pe怎么安装系统&#xff1f;u盘pe安装系统需要准备一个u盘&#xff0c;然后将u盘制作成pe&#xff0c;进入pe后再安装系统&#xff0c;下面小编就教大家u盘pe安装系统详细步骤教程。 u盘pe启动盘是什么&#xff1f; u盘pe启动盘是一种可引导的USB存储设备&#xff0c;其中包…

【js逆向专题】4.python调用JS和扣代码

小节目标: 掌握 python调用js代码方式熟悉 js开放接口进行调用了解 补环境的基本概念掌握 js调试技巧 一. pyexecjs的使用 1. 简介 PyExecJS 是一个 Python 库&#xff0c;用于在 Python 环境中执行 JavaScript 代码。它实际上是对 ExecJS 库的 Python 封装&#xff0c;Exec…

Makefile入门

Makefile入门 文章目录 Makefile入门一、Makefile入门1.1 编译工具及构建工具介绍&#xff1a;1.2 编译的四个阶段&#xff1a;1.3 Makefile的认知&#xff1a;1.3.1 什么是Makefile&#xff1a;1.3.2 Makefile的规则与示例&#xff1a; 二、Makefile的基本语法&#xff1a;2.1…

Java注解和JDK新特性

1. 注解 1.1. 认识注解 Annotation&#xff1a;JDK1.5新提供的技术 编译检查&#xff1a;比如SuppressWarnings, Deprecated和Override都具有编译检查的作用替代配置文件&#xff1a;使用反射来读取注解的信息 注解就是代码里的特殊标记&#xff0c;用于替代配置文件&#…

内存管理篇-17解开页表的神秘面纱-下

1.页表初探遗留问题-页表的创建过程 使用MMU之前&#xff0c;页表要准备好&#xff0c;怎么准备的&#xff1f;如何把物理内存通过section映射构建页表页表的创建过程分析&#xff1a;__create_page_tables--创建临时页表&#xff0c;然后在开启MMU 页表的大小和用途页表在内存…