输入一个数组,查找数字的位置。c语言

#include <bits/stdc++.h> 
//二分查找
int search(int arr2[], int k, int s)
{
	int left = 0;
	int right = s - 1;
	
	while (left<=right) {
        int mid = (left + right) / 2;
		if (k < arr2[mid])
		{
			right = mid - 1;
		}
		else if (k > arr2[mid])
		{
			left = mid + 1;
		}
		else if (k == arr2[mid])
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	//创建数组
	int arr1[10] ;
	int a;
	printf("输入一组数:");
	for ( a = 0; a < 10; a++)
	{
		scanf("%d", &arr1[a]);
	}
    int key=4;//查找4
	int sz = sizeof(arr1)/sizeof(arr1[0]);//计算数组长度
	//找到了返回下标
	//找不到返回-1
	int ret = search(arr1, key, sz);
	if (ret == -1)
	{
		printf("找不到!\n");
	}
	else
	{
		printf("找到了,在%d位\n", ret);//数组从0开始数
	}
	return 0;
}

二分查找

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的哈希表实现,可以用来存储double型数组的第dimension行: ```c #include <stdio.h> #include <stdlib.h> #define TABLE_SIZE 10000 //哈希表的大小 typedef struct ListNode { double value; struct ListNode* next; } ListNode; typedef struct HashTable { ListNode* table[TABLE_SIZE]; int count; } HashTable; unsigned int hash(double value) { return (unsigned int)value % TABLE_SIZE; } void insert(HashTable* ht, double value) { unsigned int index = hash(value); ListNode* node = ht->table[index]; while (node != NULL) { if (node->value == value) { return; //值已经存在,无需插入 } node = node->next; } //值不存在,插入新节点 node = (ListNode*)malloc(sizeof(ListNode)); node->value = value; node->next = ht->table[index]; ht->table[index] = node; ht->count++; } ListNode* find(HashTable* ht, double value) { unsigned int index = hash(value); ListNode* node = ht->table[index]; while (node != NULL) { if (node->value == value) { return node; //找到了节点 } node = node->next; } return NULL; //未找到节点 } void initHashTable(HashTable* ht) { for (int i = 0; i < TABLE_SIZE; i++) { ht->table[i] = NULL; } ht->count = 0; } void freeHashTable(HashTable* ht) { for (int i = 0; i < TABLE_SIZE; i++) { ListNode* node = ht->table[i]; while (node != NULL) { ListNode* temp = node; node = node->next; free(temp); } } ht->count = 0; } int main() { int dimension = 10; int len = 20; double arr[dimension][len]; //初始化数组 for (int i = 0; i < dimension; i++) { for (int j = 0; j < len; j++) { arr[i][j] = (double)rand(); } } //构建哈希表 HashTable ht; initHashTable(&ht); for (int j = 0; j < len; j++) { insert(&ht, arr[dimension-1][j]); //将第dimension行的据插入哈希表 } //查询 double num; printf("请输入要查找数字:"); scanf("%lf", &num); ListNode* node = find(&ht, num); if (node == NULL) { insert(&ht, num); //如果找不到则插入新节点 printf("已将该数字加入哈希表\n"); } else { printf("找到了该数字\n"); } //释放哈希表 freeHashTable(&ht); return 0; } ``` 说明: - 该哈希表使用链表法解决哈希冲突。 - hash函使用取模运算将double型数字转换为unsigned int类型的哈希值。 - insert函将新的double型数字插入哈希表中,如果该数字已经存在则不插入。 - find函在哈希表中查找指定的double型数字,如果找到了则返回对应的节点,否则返回NULL。 - main函中先将double型数组第dimension行的据插入哈希表中,然后让用户输入数字进行查找,如果找不到则插入新节点。最后释放哈希表中的所有节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值