编写 插入排序,快速排序,二分法查找;
#ifndef __SORT_H__
#define __SORT_H__
void insert_sotr(int *p,int len);//插入排序
int quick_sort_frist(int *p,int L,int R);//快速排序第一轮
void quick_sort(int *p,int L,int R);//快速排序
int search_half(int *p,int key,int L,int R);//2分查找
#endif
//****************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include "sort.h"
void insert_sotr(int *p,int len)
{
int i,j,temp;
for (i=0; i<len; i++)
{
temp=p[i];
for (j=i;temp<p[j-1]&&j>0; j--)
{
p[j]=p[j-1];
}
p[j]=temp;
}
}
int quick_sort_frist(int *p,int L,int R)
{
int base=p[L];
while (L<R)
{
while(p[R]>=base&&L<R)
{
R--;
}
p[L]=p[R];
while(p[L]<=base&&L<R)
{
L++;
}
p[R]=p[L];
}
p[R]=base;
return R;
}
void quick_sort(int * p,int L,int R)
{
int base;
if(L<R)
{
base=quick_sort_frist(p,L,R);
quick_sort(p,L,base-1);
quick_sort(p, base+1,R);
}
}
int search_half(int *p,int key,int L,int R)
{
int mid;
mid=(L+R)/2;
if(p[mid]==key)
{
printf("存在此数组中,下标为%d。\n",mid);
return mid;
}
else if (p[mid]>key)
{
search_half(p,key,L,mid-1);
}
else if (p[mid]<key)
{
search_half(p,key,mid+1,R);
}
return 0;
}
//***************************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include "sort.h"
int main(int argc, const char *argv[])
{
int a[10]={1,8,9,5,7,2,4,3,6,6};
int *p;
p=a;
// insert_sotr(p,10);
quick_sort(p,0,9);
for (int i=0; i<10; i++)
{
printf("%d ",p[i]);
}
printf("\n");
printf("请输入需要查找的数:");
int key;
scanf("%d",&key);
putchar(10);
search_half(p,key,0,9);
return 0;
}
编写哈希表查找程序
#ifndef __HASH_H__
#define __HASH_H__
#define max 13
typedef int datatype;
//datatype max;
typedef struct Node
{
datatype data;
struct Node* next;
}Node,*P_hash;
typedef struct hash
{
P_hash H[max];
}hash,*H_hash;
//创建结构体存储哈希数组
H_hash hash_create();
//创建存储数据的结构体
P_hash data_create();
//数据的封装
P_hash make_node(datatype g);
//哈希表的添加
void hash_insert(H_hash p,P_hash p1,int num);
//哈希的遍历
void hash_out(H_hash p);
//哈希表的查找
void search_hash(H_hash p,datatype g);
#endif
//***************************************************************************************
#include <stdio.h>
#include "hash.h"
#include <stdlib.h>
H_hash hash_create()//创建结构体存储哈希数组
{
H_hash p=(H_hash)malloc(sizeof(hash));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
for (int i=0; i<max; i++)//对哈希数组初始化
{
p->H[i]=NULL;
}
printf("创建成功\n");
return p;
}
P_hash data_create() //创建存储数据的结构体
{
P_hash p=(P_hash)malloc(sizeof(Node));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->next=NULL;
printf("创建成功\n");
return p;
}
P_hash make_node(datatype g)
{
P_hash p=(P_hash)malloc(sizeof(Node));
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
p->data=g;
p->next=NULL;
}
void hash_insert(H_hash p,P_hash p1,int num)//p是哈希表的地址,p1是数据的地址,num是数据在哈希表数组的下标。
{
if(p->H[num]==NULL)
{
p->H[num]=p1;
printf("增添成功\n");
}
else //尾插
{
p1->next=p->H[num]->next;
p->H[num]->next=p1;
printf("增添成功\n");
}
}
void hash_out(H_hash p)
{
for(int i=0;i<max;i++)
{
if(p->H[i]==NULL)
{
printf("%d->NULL",i);
printf("\n");
continue;
}
else
{
printf("%d->",i);
P_hash p1=p->H[i];
while(p1!=NULL)
{
printf("%d->",p1->data);
p1=p1->next;
}
printf("NULL\n");
continue;
}
}
}
void search_hash(H_hash p,datatype g)
{
int a=g%max;
P_hash p1=p->H[a];
while(p1!=NULL)
{
if(p1->data==g)
{
printf("这个数在哈希表内\n");
return ;
}
p1=p1->next;
}
printf("这个数不在哈希表内\n");
}
//**************************************************************************************
#include <stdio.h>
#include "hash.h"
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int arr[10]={3,5,86,51,32,66,71,21,30,43};
H_hash H=hash_create();
P_hash P=data_create();
for (int i=0; i<10; i++)
{
P_hash p=make_node(arr[i]);
int num=arr[i]%max;
hash_insert(H,p,num);
}
hash_out(H);
search_hash(H,30);
search_hash(H,99);
return 0;
}