折半查找的優勢

    在很多有序數組中母,查找我們所需要的數字,運用冒泡法查找是很不明智的,當數組中有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");

}


這就是我今天所學到的最主要的一個編程。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章