void show(int *,int);
void maopao(int *array,int size)
{
int i = 0,j = 0,tamp;
for(i = 0;i < size; i++)
{
for(j = 0;j < size; j++)
{
if( array[i] < array[j] )
{
tamp = array[i];
array[i] = array[j];
array[j] = tamp;
}
}
}
}
void show(int *s,int size)
{
int i=0;
for(i = 0;i < size; i++)
{
printf("%d ",s[i]);
}
printf("n");
}
快速排序
int once(int *s,int i,int j);
void show(int *p,int size)
{
//printf("%d n",p[0]);
int i = 0;
for(i = 0;i < size;i++)
{
printf("%d ",p[i]);
}
printf("n");
}
void quick(int *s,int low,int hight)//hight is xiabiao
{
int mid = 0;
if(low < hight)
{
mid = once(s,low,hight);
show(s,11);
quick(s,low,mid-1);
quick(s,mid+1,hight);
}
}
int once(int *s,int i,int j)
{
int tmp = s[i];
while(i < j)
{
while(i < j && s[j] >= tmp)
j--;
if(i < j)
s[i] = s[j];
while(i < j && s[i] <= tmp)
i++;
if(i < j)
s[j] = s[i];
}
//printf("i=j:%dn",i);
s[i] = tmp;
return i;
}
2.查找
顺序查找
int find(int *s,int size,int key)
{
int flag = 0;
for(int i=0;i < size;i++)
{
if(s[i] == key)
{
flag = 1;
printf("find:a[i] = %dn",s[i]);
}
}
if(flag)
{
return 1;
}
else
{
printf("not find!n");
return 0;
}
}
折半查找
//缺点只能找到第一个匹配的值
int find(int *s,int low,int hight,int key)
{
int mid = 0;
while(low < hight)
{
mid = (low + hight)/2;
if(s[mid] == key)
{
printf("find:a[%d] = %dn",mid,s[mid]);
break;
}
else if(key < s[mid])
{
hight = mid-1;
}
else if(key > s[mid])
{
low = mid+1;
}
}
return 0;
}
哈希查找
如果要从11个数中查找数据
然后11/0.75=14,求得最大质数13
然后创建一个有13个元素的’指针数组’
然后将’11个数’分别对’13取余’
将每一个数保存在’余数’等于’数组元素下标’的链表中 //—需要链表
然后进行查找是直接找对应的数组下标即可
#include#include #define N 13 #define ADDR_SIZE 8 typedef struct node{ int data; struct node *next; }hash; hash **create_hash() { hash **h=(hash **)malloc(N * ADDR_SIZE); for(int i = 0;i < N;i++) { h[i] = (struct node*)malloc(sizeof(struct node)); h[i]->next = NULL; } return h; } //插入数据 int insert(hash **h,int data) { int key = data%N; struct node *p = h[key]; struct node *temp = (struct node*)malloc(sizeof(struct node)); //头插法 temp->data = data; temp->next = p->next; p->next = temp; return 0; } //查找数据 int find(hash **h,int data) { int key = data % N; struct node *p = h[key]; while(p->next != NULL) { if(p->next->data == data) { printf("find:p[%d] = %dn",key,data); return 1; } p=p->next; } return 0; } //遍历 int show_hash_table(struct node *head) { //如果链表后面没有数据,则用---0---表示链表存在但是没有数据 if (head->next == NULL) { puts("---0---"); return -1; } //遍历链表,打印数据 while(head->next != NULL) { head = head->next; printf("%d ", head->data); } putchar(10); return 0; } int main() { int a[11] = {100, 34, 14, 45, 46, 98, 68, 69, 7, 31, 26}; hash **h = create_hash(); int i=0; int n; for(i = 0;i < 11;i++) { insert(h,a[i]); } #if 1 //打印hash表--无实际意义 printf("-------这是hash表--------------------n"); for (i = 0; i < N; i++) { show_hash_table(h[i]);//链表的遍历 } printf("--------hash表结束--------------------n"); printf("数组数据如下-->用于测试,无实质意义,遍历HASH表也是<---n"); for(i = 0;i < 11;i ++) { printf("%d ",a[i]); } putchar(10); #endif printf("intput number-->:"); scanf("%d",&n); if( !find(h,n) ) { printf("not find!n"); } return 0; }



