C语言查找算法
/**
?查找(數組)
?1> 順序查找 : 就是遍歷數組每一個元素同該元素比較,但是問題是效率比較低
?2> 折半查找 : 條件是數組必須是有順序的
?*/
#include <stdio.h>
#define n 2
int main()
{
? ? // 折半查找
? ? ? ? /*
?? ? ? ? 思路:將該元素同中間元素比較,如果有則存在,否則,判斷該元素在哪半部分,繼續查找;
?? ? ? ? */
?? ?
? ? // 任意輸入整數x,在有順序的數組中查找是否有同x值相同的元素
? ? // 定義輸入數據
? ? int x = -1;
? ? // 數組array
? ? int array[10] = {2, 10, 19, 22, 34, 36, 55, 67, 76, 88};
? ? scanf("%d", &x);
? ? // 定義開始元素下標start, 尾標end, 中間元素下標mid
? ? int start = 0;
? ? int end = 9;
? ? int mid = (start + end)/2;
? ? while (array[mid] != x && (end > start)){
? ? ? ? ? if (x < array[mid]) { ? ? ? ??
? ? ? ? ? ? end = mid - 1;
? ? ? ? }else{
?? ? ? ? ? ?
? ? ? ? ? ? start = mid + 1;
? ? ? ? }
? ? ? ? mid = (start + end)/2;
? ? }
? ? printf("%d\n", mid);
? ? return 0;
}
?
#include <stdio.h>
#pragma mark 折半查找 前提是該數組為順序數組,同時折半查找還能用于插入有序數組中得位置,
#pragma mark 當然我們也可以用for循環查找元素,但是效率較低,當面對大量數據有序數據是,折半查找效率比較高
#pragma mark 如果我們面對一些無須的數據時,如果查找一組數據中是否含有某個數據時,可以先排序,然后用折半查找該元素
#pragma mark 折半查找
int zheban_array(int *array, int len, int num)
{
? ? int start = 0;
? ? int end = len-1;
?? ?
? ? // 循環的條件
? ? while (start<=end) {
? ? ? ? int mid =(start+end)/2;
? ? ? ? if (array[mid]<num) {
? ? ? ? ? ? start = mid+1;
? ? ? ? }else if(array[mid]>num){
? ? ? ? ? ? end = mid-1;
? ? ? ? }else{
? ? ? ? ? ? return mid; // 如果是查找插入元素的話 mid+1就是要插入的位置(查找到存在的插入的元素)
? ? ? ? }
//? ? ? ? mid = (start+end)/2;
? ? }
? ? return -1; //如果查找的話,return start 就是要插入的位置(查找插入的不存在的元素)
}
?
#pragma mark 遍歷數組
void? printf_array(int *array, int len){
?? ?
? ? for (int i = 0; i<len; i++) {
? ? ? ? printf("%d\t", array[i]);
? ? }
? ? printf("\n");
}
int main()
{
? ? int array[] = {3, 5, 8, 23, 34, 65, 99};
? ? int len = sizeof(array)/sizeof(int);
? ? int n = zheban_array(array, len, 34);
? ? printf("%d\n", n);
? ? return 0;
}
?
轉載于:https://www.cnblogs.com/-boy/p/4020803.html
總結
- 上一篇: iOS开发-多线程编程技术(Thread
- 下一篇: 喜欢的一些话(不断更新)