大开销递归版二分查找
2014-05-19 17:27
423 查看
这个不科学,但是也是一种递归的应用
#include <stdio.h> #include <time.h> #define SIZE 20 void print_array(int a[], int len) { int i = 0; for (i = 0; i < len; i++){ printf("%d,", a[i]); } printf("\n"); } void swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } void selection_sort(int a[],int len) { int i = 0; int j = 0; for (i = 0; i < len; i++){ for (j = i; j < len;j++){ if (a[j] < a[i]){ swap(a,i,j); } } } } int binary_search(int a[],int low, int high, int key) { int ret = -1; if (low <= high){ int mid = (low + high) / 2; if (a[mid] == key){ ret = mid; } else if (a[mid] > key){ ret = binary_search(a,low,mid-1,key); } else{ ret = binary_search(a, mid+1, high, key); } } return ret; } int main(void){ int a[SIZE] = { 0 }; int i = 0; int key = 0; int index = -1; srand((unsigned int)time(NULL)); for (i = 0; i < SIZE; i++){ a[i] = rand() % 100; } key = rand() & 100; printf("Static Search Demo\n"); printf("Key: %d\n", key); printf("Array: \n"); print_array(a, SIZE); selection_sort(a,SIZE); print_array(a, SIZE); index = binary_search(a, 0,SIZE, key); if (index >= 0){ printf("SUCCED: a[%d] = %d\n", index, a[index]); } else{ printf("Failed!!\n"); } system("PAUSE"); return 0; }
相关文章推荐
- 二分查找的非递归实现
- 递归之二分查找
- 【笔试】Java 二分查找(递归,非递归)
- 二分查找(递归与非递归)
- 插入排序的递归实现和二分查找递归实现,算法导论2.3-4和2.3-5
- 二分查找的非递归和递归例程实现
- 用递归方法在有序表中二分查找(折半查找)
- c语言简单递归/非递归实现二分查找
- 二分查找的递归与非递归实现
- 【C++】二分查找的递归形式和非递归形式
- java递归实现二分查找
- java实现 二分查找 非递归与递归2种方式
- 二分查找,递归
- 二分查找(递归和非递归写法)
- C 二分查找 递归与非递归的实现代码
- 【openjudge】月度开销 二分查找
- 使用递归和非递归两种方法实现二分查找!!!
- 二分查找 递归实现 和 循环实现
- c# 递归 求阶乘 实现二分查找
- 二分查找(递归、非递归)