1、哈希表的代码写完,写出给出关键字,找到该关键字在哈希表(指针数组)中下标的位置,以及在链表中的位置。(因为返回值只有一个,所以结果直接找到通过输出语句输出)
void search(node *H,int key);
2、快速排序和折半查找的代码写一遍
3、整理思维导图
1、
void search(node_p H,int key);
{
int i = key%MAX;
node_p q = H[i];
while(q!=NULL && q->data!=key)
{
q = q->next;
}
if(q == NULL)
{
printf("查找失败\n");
return 0;
}else
{
printf("查找成功\n");
return 1;
}
}
2、
快速排序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int one_sort(int *a,int l,int h)
{
int temp = a[l];
while(h>l)
{
while(h>l&&a[h]>temp)
{
h--;
}
a[l] = a[h];
while(h>l&&a[l]<temp)
{
l++;
}
a[h] = a[l];
}
a[l] = temp;
return l;
}
void sort(int *a,int l,int h)
{
if(h>l)
{
int ret = one_sort(a,l,h);
sort(a,l,ret-1);
sort(a,ret+1,h);
}
}
int main(int argc, const char *argv[])
{
int arr[]={34,78,56,90,12,100,23,76};
int len = sizeof(arr)/sizeof(arr[0]);
sort(arr,0,len-1);
for(int i=0;i<len;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
二分查找:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.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;
}
}
return -1;
}
int main(int argc, const char *argv[])
{
int arr[]={12,34,56,77,86,90};
int len = sizeof(arr)/sizeof(arr[0]);
printf("找到的数据的下标为%d\n",half_search(arr,0,len-1,100));
return 0;
}