2024.3.19

1.哈希表

代码:

#include"hash.h"

//申请结点
node_p create_node(int data)
{
	node_p new = (node_p)malloc(sizeof(node));
	new->data = data;
	return new;
}
//存入哈希表
void insert(node_p H[],int key)
{
	//数据要存入哈希表中指定下标的位置
	int i = key%MAX;
	//申请结点
	node_p new = create_node(key);
	//头插
	new->next = H[i];
	H[i] = new;
}
//输出哈希表
void show(node_p *H)
{
	if(H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	for(int i=0;i<MAX;i++)
	{
		//输出指针数组所指向的链表
		node_p p = H[i];
		while(p!=NULL)
		{
			printf("%d->",p->data);
			p=p->next;
		}
		printf("NULL\n");
	}
}
//查找元素
void search(node_p H[],int key)
{
	if (H==NULL)
	{
		printf("入参为空,请检查\n");
		return;
	}
	int i = key%MAX;
	node_p p = H[i];
	if(p->data==key)
	{
		printf("该元素下标为:%d\n",i);
		return;
	}
	else
	{
		p = p->next;
		printf("该元素下标为:%d\n",i);
		return;
	}
	if(p->data!=key)
	{
		printf("没有该元素\n");
		return;
	}
}

结果:

2.快速排序和折半(二分)查找

快速排序

代码:

#include<myhead.h>

//一次快排的代码,需要返回基准最后的位置
int one_sort(int *arr,int low,int high)
{
	//定义一个基准元素,每次的基准元素是序列中low下标的元素
	int base = arr[low];
	while(high>low)
	{
		while(high>low&&arr[high]>base)
		{
			high--;
		}
		arr[low] = arr[high];
		while(high>low&&arr[low]<base)
		{
			low++;
		}
		arr[high] = arr[low];
	}
	arr[low] = base;
	return low;
}
//整体快排
void sort(int *arr,int low,int high)
{
	if(high>low)
	{
		int ret = one_sort(arr,low,high);
		sort(arr,low,ret-1);
		sort(arr,ret+1,high);
	}
}

int main(int argc, const char *argv[])
{
	int arr[]={98,72,65,43,12,66,25,39};
	int len = sizeof(arr)/sizeof(arr[0]);
	//one_sort(arr,0,len-1);    一次快排
	sort(arr,0,len-1);
	//输出
	for(int i=0;i<len;i++)
	{
		printf("%d\n",arr[i]);
	}
	return 0;
}

结果:

折半查找

代码:

#include<myhead.h>

//折半查找的函数
int half_search(int *arr,int low,int high,int key)
{
	while(high>=low)//查找算法,一个数也要查
	{
		int mid = (low+high)/2;
		if(arr[mid]==key)
		{
			return mid;
		}
		else if(arr[mid]>key)
		{
			high = mid-1;
		}
		else if(arr[mid]<key)
		{
			low = mid+1;
		}
	}
	printf("没有该元素\n");
	return -1;
}

int main(int argc, const char *argv[])
{
	int arr[]={12,25,36,47,58,89,92};//需要数组有序,逻辑有序即可
	int len = sizeof(arr)/sizeof(arr[0]);
	int n;
	printf("请输入想要查找到的元素:");
	scanf("%d",&n);
	printf("查找到的数据下标为:%d\n",half_search(arr,0,len-1,n));
	return 0;
}

结果:

3.思维导图

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 14:36:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 14:36:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 14:36:03       82 阅读
  4. Python语言-面向对象

    2024-03-23 14:36:03       91 阅读

热门阅读

  1. 一个简易的基于线程池的TCP的任务处理

    2024-03-23 14:36:03       35 阅读
  2. PAT乙级 1054 求平均值 C语言

    2024-03-23 14:36:03       39 阅读
  3. Web 常见的攻击方式有哪些?

    2024-03-23 14:36:03       40 阅读
  4. flink-connector-redis支持select查询

    2024-03-23 14:36:03       35 阅读
  5. web蓝桥杯真题:布局切换

    2024-03-23 14:36:03       40 阅读
  6. arcpy一些常用的数据处理类

    2024-03-23 14:36:03       45 阅读
  7. SurfaceFlinger的面试题目

    2024-03-23 14:36:03       37 阅读
  8. 变量的数据类型:基本数据类型和引用数据类型

    2024-03-23 14:36:03       43 阅读
  9. 双雷达(velodyne)的启动与集成

    2024-03-23 14:36:03       40 阅读
  10. 关于系统部署测试人员的10道经典面试题

    2024-03-23 14:36:03       35 阅读
  11. HTTP Header Fields

    2024-03-23 14:36:03       40 阅读
  12. 【Unity】Stream最好用的Selfhost开源轻量服务

    2024-03-23 14:36:03       46 阅读