#include<stdlib.h>
#include"hash.h"
#include<stdio.h>
//初始化哈希表
void init_hash(Node *hash[])
{
for(int i=0;i<N;i++)
{
hash[i]=NULL;
}
}
//将元素存入哈希表
int insert_hash(Node *hash[],datatype e)
{
int pos = e%N; //哈希函数
Node *p=(Node*)malloc(sizeof(Node)); //申请结点
if(p == NULL)
{
printf("申请失败\n");
return -1;
}
p->data=e;
p->next=NULL; //存储
p->next=hash[pos];
hash[pos]=p; //头插输入
}
//定义查看哈希函数
void show_hash(Node *hash[])
{
for(int i=0;i<N;i++)
{
printf("%d:",i);
Node *p=hash[i];
while(p!=NULL)
{
printf(" ---> %d\t",p->data);
p=p->next;
}
printf("^\n");
}
}
#include<stdio.h>
//冒泡
int pop_sort(int *arr,int n)
{
int i,j;
int temp;
int flag=0;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;
flag = 1;
}
}
if(flag == 0)
break;
}
}
//选择
int select_sort(int *arr,int n)
{
int i,j;
int temp;
int index;
for(i=0;i<n-1;i++)
{
index=i;
for(j=i+1;j<n;j++)
{
if(arr[index]>arr[j])
index=j;
}
if(index != i)
{
temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
}
}
//插入
int insert_sort(int *arr,int n)
{
int i,j;
int temp;
for(i=0;i<n;i++)
{
temp = arr[i];
for(j=i;j>0 && temp <arr[j-1];j--)
{
arr[j]=arr[j-1];
}
arr[j]=temp;
}
}
//快排
int part(int *arr,int low,int high)
{
int x=arr[low]; //设置基准
while(low < high)
{
while(arr[high]>x && low < high)
{ high--;}
arr[low]=arr[high];
while(arr[low] <x && low < high)
{ low++;}
arr[high]=arr[low];
}
arr[low]=x;
return low;
}
void quik_sort(int *arr,int low,int high)
{
int mid;
if(low < high)
{
mid=part(arr,low,high);
quik_sort(arr,low,mid-1);
quik_sort(arr,mid+1,high);
}
}
int main(int argc, const char *argv[])
{
int arr[8]={198,289,98,357,85,170,232,110};
int i;
printf("排序前:\n");
for(i=0;i<8;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
//pop_sort(arr,0,7); //冒泡
//select_sort(arr,0,7); //选择
//insert_sort(arr,0,7); //插入
quik_sort(arr,0,7); //快排
printf("排序后:\n");
for(i=0;i<8;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
return 0;
}
3.折半查找
#include<stdio.h>
int half_search(int *arr,int n,int x)
{
int low=0;
int high=n-1;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(arr[mid]==x)
{
return mid;
}
else if(x<arr[mid])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
return -1;
}
int main(int argc, const char *argv[])
{
int arr[5]={2,5,7,8,23};
int res=half_search(arr,5,7);
if(res == -1)
printf("未找到\n");
else
printf("在%d\n",res+1);
return 0;
}