在很多有序數組中母,查找我們所需要的數字,運用冒泡法查找是很不明智的,當數組中有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");
}
這就是我今天所學到的最主要的一個編程。