哈希表与二分查找
#include hash.h //创建节点存储哈希数 node_p create_new_point(datatype data) { node_p new(node_p)malloc(sizeof(node)); if(NULLnew) { printf(申请空间失败\n); return NULL; } new-datadata; return new; } //哈希插入(链表头插) void insert_hash(node_p H[],datatype key) { int ikey%MAX; if(HNULL) { printf(入参为空\n); return; } node_p newcreate_new_point(key); new-nextH[i]; H[i]new; } //输出 void show(node_p H[]) { if(HNULL) { printf(入参为空\n); return; } for(int i0;iMAX;i) { node_p pH[i]; while(p!NULL) { printf(%d-,p-data); pp-next; } printf(NULL\n);//不进入循环没形成链表 } } //按值查找返回元素在数组指针以及链表中的位置 void search(node_p *H,datatype key) { if(HNULL) { printf(入参为空\n); return; } int count1; node_p pH[key%MAX]; while(p!NULL) { if(p-datakey) { printf(元素在指针数组H[%d]的第%d个节点的数据域\n,key%MAX,count); } pp-next; count; } }#include stdio.h #include string.h #include stdlib.h int fun(int*arr,int low,int high,int key) { while(highlow) { int mid(highlow)/2; if(arr[mid]key) { return mid; } if(arr[mid]key); { highmid-1; } if(arr[mid]key); { lowmid1; } } return -1; } int main(int argc, const char *argv[]) { int arr[]{12,34,56,77,86,90}; int lensizeof(arr)/sizeof(arr[0]); printf(%d\n,fun(arr,0,len-1,56)); return 0; }#include stdio.h #include string.h #include stdlib.h int onesort(int *arr,int low,int high) { int basearr[low]; while(highlow) { while(highlow arr[high]base) { high--; } arr[low]arr[high]; while(highlow arr[low]base) { low; } arr[high]arr[low]; } arr[low]base; return low; } void sort(int *arr,int low,int high) { if(highlow) { int retonesort(arr,low,high); onesort(arr,low,ret-1); onesort(arr,ret1,high); } } int main(int argc, const char *argv[]) { int arr[]{50,36,66,76,36,12,25,95}; int lensizeof(arr)/sizeof(arr[0]); sort(arr,0,len-1); for(int i0;ilen;i) { printf(%d\n,arr[i]); } return 0; }