说明:利用随机函数生成一个随机数组,然后对数组进行排列,再利用二分查找快速查找一个数。
一.生成随机数组
1 time_t ts; 2 //等价于long ts; 3 unsigned int num = time(&ts); 4 srand(num); 5 int a[10] = {0}; 6 for(int i = 0;i<10;i++) 7 a[i] = rand()%100;
注意:sizeof(long) = sizeof(unsigned int) = sizeof(time_t) = 4。上述代码也可以用以下代码代替:
1 srand(time(NULL)); 2 int a[10] = {0}; 3 for(int i = 0;i<10;i++) 4 a[i] = rand()%100;
二.对数组进行排列
在上一节已经叙述过快速排序的原理了,这里不再过多讲解,直接上迭代法排序代码。
1 void sortlist(int *p,int low,int high) 2 { 3 if(low < high) 4 { 5 int l = low; 6 int h = high; 7 int middle = p[low]; 8 while(l<h) 9 { 10 while(p[h] >= middle && l<h) 11 h--; 12 p[l] = p[h]; 13 while(p[l] <= middle && l<h) 14 l++; 15 p[h] = p[l]; 16 } 17 p[h] = middle; 18 sortlist(p,low,h-1); 19 sortlist(p,h+1,high); 20 } 21 }
其中 p 为数组名,LOW为 0 ,high为数组元素个数减 1。
三.二分法快速查找
二分法查找适用于查找数据量相当大的数据库,且要求数据有序。假如对于一个有一千个数的有序数组,利用二分法查找一个数据,第一次即可筛选掉500个数据,第二次即可筛选掉250个数据,以此类推。其代码实现如下:
1 nt binarysearch(int *p,int low,int high,int data) 2 { 3 int middle = (low + high)/2; 4 if(data == p[middle]) 5 return data; 6 else if(data > p[middle]) 7 return binarysearch(p,middle+1,high,data); 8 else 9 return binarysearch(p,low,middle-1,data); 10 }
四.最后上一个示例,代码功能是生成一个随机数组,对其采用迭代法进行排序,然后利用二分法查找一个数据。
1 #include<stdio.h> 2 #include<time.h> 3 #include<stdlib.h> 4 void travelllist(int *p,int n) 5 { 6 int i = 0; 7 for(;i<n;i++) 8 printf("%d ",p[i]); 9 putchar(10); 10 } 11 12 void sortlist(int *p,int low,int high) 13 { 14 if(low < high) 15 { 16 int l = low; 17 int h = high; 18 int middle = p[low]; 19 while(l<h) 20 { 21 while(p[h] >= middle && l<h) 22 h--; 23 p[l] = p[h]; 24 while(p[l] <= middle && l<h) 25 l++; 26 p[h] = p[l]; 27 } 28 p[h] = middle; 29 sortlist(p,low,h-1); 30 sortlist(p,h+1,high); 31 } 32 } 33 34 int binarysearch(int *p,int low,int high,int data) 35 { 36 int middle = (low + high)/2; 37 if(data == p[middle]) 38 return middle; 39 else if(data > p[middle]) 40 return binarysearch(p,middle+1,high,data); 41 else 42 return binarysearch(p,low,middle-1,data); 43 } 44 45 int main() 46 { 47 int i; 48 srand(time(NULL)); 49 int arr[100] = {0}; 50 for( i = 0;i<100;i++) 51 arr[i] = rand() % 100; 52 travelllist(arr,100); 53 sortlist(arr,0,99); 54 travelllist(arr,100); 55 int data = binarysearch(arr,0,99,3); 56 printf("%d %d",data,arr[data]); 57 return 0; 58 }