c語言二分查找實驗程序截圖下載,c語言二分查找代碼

本文目錄一覽:

怎樣寫二分查找演算法的程序(用C語言實現)

我用一個子函數實現的,主函數你自己寫,對你又好處,需要傳入一個數組和數組長度n以及要查找的數,如果查找成功,返回x在數組中的位置,否則返回-1

int search(int *a,int x)

{ int low=0,high=n-1,mid,flag=-1;

while(low=high)

{ mid=(low+high)/2;

if(a[mid]==x) return mid;

else if(a[mid]low) low=mid+1;

else high=mid-1;

}

return flag;

}

誰能用c語言幫我寫個二分法的查找程序??

#includestdlib.h

void

sort(int

a[],int

n){

/*排序函數,要使用二分法查找就必須對數組進行排序*/

int

i,k;

for(i=0;in;i++){

int

min=i;

for(k=i+1;kn;k++)

if(a[min]a[k])min=k;

if(i!=min){

a[min]+=a[i];/*這裡是運用加減法交換兩個數*/

a[i]=a[min]-a[i];

a[min]-=a[i];

}

}

}

int

find(int

a[],int

n,int

key){/*二分法查找;參數:數組名,數組長度,查找關鍵字*/

int

min=0,max=n-1;/*二分法查找頭尾變數*/

while(minmax){/*如果最頭的變數值大於最尾變數的值,則查找不到,查找失敗*/

int

cen

=

(min+max)/2;

if(a[cen]==key)

return

cen;/*如果查到,則返回關鍵字在排序數組的下標*/

if(cen==min

||

cen==max)break;/*如果中間變數等於頭尾任一個變數,同樣查找失敗*/

if(a[cen]key)

max=cen;

else

min=cen;

}

return

-1;

}

void

main(){/*主程序只是為了證明兩個函數的可行性,可以自己編寫*/

int

a[]={14,10,25,36,87,95,10,12,13,8},i;

sort(a,10);

i=find(a,10,11);

if(i!=-1)

printf(“be

found”);

else

printf(“no

found”);

getch();

}

用C語言寫二分查找的代碼!!!

推薦答案的 code 有問題,並沒有考慮到若待查數的下標是 0 怎麼辦?所以若順序表中不存在待查元素 應該 return -1

加上主函數的最後兩行調用兩次查找函數很多餘,代碼顯得不夠簡練。

建議改成:

#include stdio.h

#include stdlib.h

int Search(int *a, int key)

{

    // 在順序表中折半查找 key的數據元素。若找到,則函數值為

    int low = 0, mid; // 該元素的數組下標;否則為0。

    int high = 14;

    while (low = high)

    {

        mid = (low + high) / 2;

        if (key == a[mid])

            return mid; // 找到待查元素

        else if (key  a[mid])

            high = mid – 1; // 繼續在前半區間進行查找

        else

            low = mid + 1; // 繼續在後半區間進行查找

    }

    return -1; // 順序表中不存在待查元素

}

void main()

{

    int *a, key, i;

    int b[15] = {0};

    a = b;

    printf(“請自小到大輸入15個整數:\n”);

    for (i = 1; i = 15; i++)

    {

        scanf(“%d”, b[i – 1]);

        printf(“\n”);

    }

    printf(“請輸入你要查找的數:\n”);

    scanf(“%d”, key);

    i = Search(a, key);

    if (-1 == i)

        printf(“你要查找的數不在目標數組中!\n”);

    else

        printf(“你要查找的數的數組下標為 %d \n”, i);

}

c語言如何實現二分查找,問題描述看圖,我的源代碼如下:

#include stdio.h

int numbers[1000001]; //全局變數,數組numbers太大,必須放在這裡定義

int Bsearch(int numbers[], int left, int right, int k);

int main()

{

    int i, j, k, m, n;

    //數組numbers太大,不能放在main函數里,而要放在函數外定義,

    //不然的話,會導致函數堆棧溢出.

    //原代碼int numbers[1000001];

    // 反覆讀入數字和查找數字的數量

    while (scanf(“%d %d”, n, k) != EOF)

    {

        // 讀入給定的數字

        for (i = 0; i  n; i++)

        {

            scanf(“%d”, numbers[i]);

        }

        for (j = 0; j  k; j++)

        {

            // 讀入待查找的數字,

            scanf(“%d”, m);

            // 請在下面完成查找讀入數字的功能

            int ret;

            ret = Bsearch(numbers, 0, n – 1, m);

            printf(“%d”, ret);

            if (j != k – 1)

            {

                printf(” “);

            }

        }

        printf(“\n”);

    }

    return 0;

}

int Bsearch(int numbers[], int left, int right, int m)

{

    int mid;

    while (left = right) //原代碼while (left  right)

    {

        mid = (left + right) / 2;

        if (numbers[mid] == m)

        {

            return mid + 1;

        }

        else if (numbers[mid]  m)

        {

            right = mid -1;

        }

        else

        {

            left = mid + 1;

        }

    }

    return 0;

}

C語言二分查找

if(key==a[mid]) return mid; 這句就是罪魁禍首。呵呵你是想用return來結束while循環吧。用錯了。

找到結果後,你應該是把結果輸出出來,而不是用return。return語句是返回整個函數的,在你的程序里main函數就結束了,你當然看不到任何結果了。

改為:

if(key==a[mid]) break; *這行是結束while循環的。而不是你所用的return*/

}

c語言實驗報告的二分法查找,跪求各位高手幫助

#include”stdio.h”

#define N 10

int find(int a[],int x)

{

int p,h,t;

p=-1;

h=0,t=N-1;

while(h=t)

if(a[(h+t)/2]x) h=(h+t)/2;

else if(a[(h+t)/2]x) t=(h+t)/2;

else {p=(h+t)/2;break;}

return p;

}

main()

{

int p,m,a[N]={1,3,4,8,9,11,13,17,18,20};

scanf(“%d”,m);

p=find(a,m);

if(p==-1) printf(“\nno!”);

else printf(“\nYES! %d”,p);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288563.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 02:59
下一篇 2024-12-24 03:00

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29

發表回復

登錄後才能評論