中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言二分查找如何應用

發布時間:2023-04-28 16:41:46 來源:億速云 閱讀:104 作者:iii 欄目:開發技術

這篇文章主要講解了“C語言二分查找如何應用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言二分查找如何應用”吧!

    一、二分查找算法

    所謂二分查找,就是要在一組有序的數列中,查找給定的數是否在此數列中。

    最主要的步驟有三個:

    1.確定被查找的范圍的左右下標left、right
    2.根據left和right,確定中間元素的下標mid
    3.根據mid鎖定的元素和查找的元素比較,確定新的查找范圍left和right

     下面將用圖示和代碼來講解上面的三個步驟:

    1.假定給定的數組中元素個數為奇數個

    C語言二分查找如何應用

    2.假定給定的數組為偶數個

    C語言二分查找如何應用

    3.假定給定的數不在此數列中

    C語言二分查找如何應用

    根據以上這三種情況,代碼可以寫成如下形式:

    #include <stdio.h>
    int main()
    {
        int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
        int left = 0, right = sizeof(arr) / sizeof(arr[0]) - 1;
        int x = 0,flag = 0;
     
        scanf("%d", &x);//要找的數
     
        while (left <= right)//若要找的數在此數組中,此條件會一直成立;
                             //若要找的數不在此數組中,最終left會大于right,從循環中跳出
        {
            int mid = (left + right) / 2;
            if (x == arr[mid])
            {
                printf("%d\n", mid);
                flag = 1;
                break;
            }
            else if (x > arr[mid])
            {
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }
        if (flag == 0)//只有當要找的數在數組中找不到時flag == 0
        {
            printf("找不到\n");
        }
        return 0;
    }

     總結:從上面的例子可以看出,二分法求解是一種很高效的方法,因為一次就可以排除一半的可能性。但也要注意,二分法只適用于有序數列

    二、分支語句中應注意的小點

    1.懸空else語句

    #include <stdio.h>
    int main()
    {
    	int a = 0;
    	int b = 2;
    	if (a == 1)
    		if (b == 2)
    			printf("hehe\n");
    		else
    			printf("haha\n");
    	return 0;
    }

    在上面的代碼中,有人可能就會對else語句與哪個if語句配對產生誤解。

    其實:else是和它離的最近的if匹配的。但如果是像上面那樣寫就容易引起歧義。可以寫成下面的形式:

    #include <stdio.h>
    int main()
    {
    	int a = 0;
    	int b = 2;
    	if (a == 1)
    	{
    		if (b == 2)
    		{
    			printf("hehe\n");
    		}
    	}
    	else
    	{
    		printf("haha\n");
    	}
    	return 0;
    }

    適當的使用{}可以使代碼的邏輯更加清楚。

    2.switch語句中的break

    switch允許嵌套使用

    #include <stdio.h>
    int main()
    {
    	int n = 1;
    	int m = 2;
    	switch (n)
    	{
    	case 1:
    		m++;//m == 3
    	case 2:
    		n++;//n == 2
    	case 3:
    		switch (n)
    		{//switch允許嵌套使用
    		case 1:
    			n++;
    		case 2:
    			m++;//m == 4
    			n++;//n == 3
    			break;
    		}
    	case 4:
    		m++;//m == 5, n == 3
    		break;
    	default:
    		break;
    	}
    	printf("m = %d, n = %d\n", m, n);
    	return 0;
    }

    上面代碼中,有的case語句后沒有加上break,這就會導致執行完一條沒有加break的case語句后還會執行其下面的一條case語句,可能就會導致跟我們想要的判斷輸出結果不同。因為switch更多時候執行的是條件判斷的功能,所以最好

    在每一條有效的case語句后面都加上break。同時也要注意,在每個 switch 語句中都放一條default子句是個好習慣,甚至可以在后邊再加一個 break 。

    感謝各位的閱讀,以上就是“C語言二分查找如何應用”的內容了,經過本文的學習后,相信大家對C語言二分查找如何應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    孝感市| 赤水市| 清远市| 乌鲁木齐县| 永康市| 靖安县| 南澳县| 长泰县| 鄂伦春自治旗| 甘洛县| 淮滨县| 钟祥市| 大丰市| 松桃| 济阳县| 江山市| 师宗县| 龙岩市| 敦煌市| 咸丰县| 会理县| 兴隆县| 六盘水市| 通城县| 大名县| 贡觉县| 萨迦县| 湖北省| 天柱县| 寿阳县| 安国市| 孙吴县| 中超| 金坛市| 福鼎市| 宣城市| 德化县| 页游| 宜州市| 梨树县| 同心县|