用c语言写一个哈希算法
时间: 2023-03-22 20:02:46 浏览: 64
我不是很了解C语言,但是我可以尝试给出一个哈希算法的实现: unsigned int hash(char *str)
{
unsigned int hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
相关问题
C语言写一个,哈希算法
哈希算法是一种将任意大小的数据映射到固定大小的数据的一种方法。下面是一个简单的哈希算法的C语言实现:
```c
#include <stdio.h>
#include <string.h>
#define HASH_SIZE 256
unsigned int hash(char *str)
{
unsigned int hash = 0;
while (*str)
{
hash = hash * 31 + *str++;
}
return hash % HASH_SIZE;
}
int main()
{
char str[256];
printf("Enter a string: ");
scanf("%s", str);
unsigned int h = hash(str);
printf("Hash value of \"%s\" is %u\n", str, h);
return 0;
}
```
这个哈希算法使用了一个简单的方法将字符串映射到一个0到255的整数,该方法在处理字符串时将每个字符乘以一个大素数31,然后将结果累加到哈希值中。最后,将哈希值除以哈希表大小并取余数,以确保它在哈希表中的位置在0到255之间。
用C语言编写一段哈希排序算法
哈希排序算法的C语言实现如下: #include<stdio.h> int hash[10]; // 哈希表 // 哈希函数
int hash_key(int key)
{
return key % 10;
} // 插入元素
void hash_insert(int key)
{
int addr = hash_key(key);
while (hash[addr] != 0)
addr = (addr + 1) % 10;
hash[addr] = key;
} // 哈希排序
void hash_sort()
{
int i;
for (i = 0; i < 10; i++)
{
if (hash[i] != 0)
printf("%d ", hash[i]);
}
} int main()
{
int key[] = {12, 25, 36, 20, 30, 8, 42};
int i;
for (i = 0; i < 7; i++)
{
hash_insert(key[i]);
}
hash_sort();
return 0;
}
阅读全文