折半查找的优势

    在很多有序数组中母,查找我们所需要的数字,运用冒泡法查找是很不明智的,当数组中有10个元素时,运用冒泡就是10次查找,但当数组元素达到1000000时,电脑需要运行1000000遍,对于cpu来说,是超负荷的,可能导致整个系统死机状态。

然而,我们知道在计算机中,最大的无符号整型是42亿多点,通过下列语句就可以知道:

unsigned int maxInt = 0xFFFFFFFF;

printf("%d\n", maxInt);

然而如果运用折半查找,计算机在数组1000000个元素中需要遍历的次数是 count=24,运用下列代码就可知道:

int n = 10000000, count = 0;

while (n > 0) {

n /= 2;

count++;

}

printf("count = %d\n", count);

当n的数值越来越大时,我们会发现它count的值就增加了一点点,并不是我们所想的会需要遍历很多,所以折半查找在查找数组中大量元素时是最好的方法。

因为我们知道,折半查找时,数组中的元素需要是有序的,则我定义一个有序的数组,进行折半查找:

//start 和 end 和 mid 指的是数组的下标

int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

int count = sizeof(a) / sizeof(a[0]);

int start = 0, end = 0, mid = 0;

int x = 0;

printf("请输入你所需要查找的数字: \n");

scanf("%d", &x);

while (start <= end) {

mid = (start + end) / 2;

if (a[mid] > x) {

end = mid - 1;

} else if (a[mid] < x) {

start = mid + 1;

} else {

break;

}

}

if (a[mid] == x) {

printf("%d\n", mid);

} else {

printf("no found\n");

}


这就是我今天所学到的最主要的一个编程。



你可能感兴趣的:(C语言,折半查找)