一、哈希表
1.创建哈希表
#define MAX 13
typedef struct node
{
int data;
struct node *next;
}node,*node_p;
int arr[]={25,51,8,22,26,67,11,16,54,41};
int len=sizeof(arr)/sizeof(arr[0]);
int hash_len=len*4/3;
node_p H[MAX]={0};
2.创建新结点
node_p create_node(int data)
{
node_p new=(node_p)malloc(sizeof(node));
if(new==NULL)
{
printf("申请空间失败\n");
return NULL;
}
new->data=data;
return new;
}
3.存入哈希表
void insert(node_p H[],int key)
{
if(H==NULL)
{
printf("入参为空,请检查\n");
return;
}
int i = key%MAX;
node_p new = create_node(key);
new->next=H[i];
H[i]=new;
}
4.输出哈希表
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");
}
}
5.查找元素
void search(node_p *H,int key)
{
if(H==NULL)
{
printf("入参为空,请检查\n");
return;
}
for(int i=0;i<MAX;i++)
{
node_p p = H[i];
while(p!=NULL)
{
if(p->data==key)
{
printf("该元素在哈希表第%d个\n",i);
return;
}
p=p->next;
}
}
printf("该元素不在哈希表内\n");
}
二、快速排序
#include<stdio.h>
int one_sort(int *arr,int low,int high)
{
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,ret+1,high);
sort(arr,low,ret-1);
}
}
int main(int argc, char *argv[])
{
int arr[]={34,78,56,90,12,100,26,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>
int search(int *arr,int low,int high,int key)
{
int mid = (low+high)/2;
if(arr[mid]==key)
{
return mid;
}
else if(high>=low)
{
if(arr[mid]>key)
{
mid--;
return search(arr,low,mid,key);
}
if(arr[mid]<key)
{
mid++;
return search(arr,mid,high,key);
}
}
return -1;
}
int main(int argc, char *argv[])
{
while(1)
{
int arr[]={1,3,5,7,9,12,13,15,16,20};
int len = sizeof(arr)/sizeof(arr[0]);
int key;
scanf("%d",&key);
int a=search(arr,0,len-1,key);
printf("查找的值的下标为%d\n",a);
}
return 0;
}
四、思维导图