1二分搜索算法的前提条件2数据集的生成自动生成数组空间大小分别为100100010000100000的数据集3二分搜索算法的非递归实现4二分搜索算法的递归实现5二分搜索算法的在数据集上的测试性能的分析。用C++实现
1.二分搜索算法的前提条件: 1)数据必须是有序的,否则无法使用二分搜索算法。 2)数据集必须是静态的,也就是说数据集不会发生变化,否则需要重新排序。
2.数据集的生成: 生成100个随机数的数组: int arr[100]; srand((unsigned)time(NULL)); for (int i = 0; i < 100; i++) { arr[i] = rand() % 1000; }
生成1000个随机数的数组: int arr[1000]; srand((unsigned)time(NULL)); for (int i = 0; i < 1000; i++) { arr[i] = rand() % 10000; }
生成10000个随机数的数组: int arr[10000]; srand((unsigned)time(NULL)); for (int i = 0; i < 10000; i++) { arr[i] = rand() % 100000; }
生成100000个随机数的数组: int arr[100000]; srand((unsigned)time(NULL)); for (int i = 0; i < 100000; i++) { arr[i] = rand() % 1000000; }
3.二分搜索算法的非递归实现: int binary_search(int arr[], int n, int target) { int left = 0, right = n - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; }
4.二分搜索算法的递归实现: int binary_search_recursive(int arr[], int left, int right, int target) { if (left > right) { return -1; } int mid = (left + right) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { return binary_search_recursive(arr, mid + 1, right, target); } else { return binary_search_recursive(arr, left, mid - 1, target); } }
5.二分搜索算法的在数据集上的测试性能的分析: 在数据集大小相同的情况下,使用递归实现的二分搜索算法比非递归实现的二分搜索算法速度稍微慢一点,但差别不大。在数据集大小不同的情况下,随着数据集大小的增加,非递归实现的二分搜索算法的性能优势会更加明显。同时,数据集的有序性也会影响二分搜索算法的性能,有序性越高,二分搜索算法的性能越好
原文地址: https://www.cveoy.top/t/topic/cnRG 著作权归作者所有。请勿转载和采集!