bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

c語言中文二分搜索函數 C語言二分搜索

C語言二分查找法

#include stdio.h

創新互聯提供成都網站設計、成都做網站、網頁設計,品牌網站設計廣告投放等致力于企業網站建設與公司網站制作,10多年的網站開發和建站經驗,助力企業信息化建設,成功案例突破近千家,是您實現網站建設的好選擇.

int binfind(int val[] , int num , int value)

{

int start = 0;

int end = num - 1;

int mid = (start + end)/2;

while(val[mid] != value start end)

{

if (val[mid] value)

{

end = mid - 1;

}

else if (val[mid] value)

{

start = mid + 1;

}

mid = ( start + end )/2;

}

if (val[mid] == value)

return mid;

else

return -1;

}

int main()

{

int nums[] = {1 , 3 , 4 ,7 ,8 , 12 ,45 ,67 ,97 ,123 ,456 ,675 ,1111 , 4534 , 4563};

int result = binfind(nums , sizeof(nums) / sizeof(nums[0]) , 45);

if (result 0)

{

printf("查無此數");

}

}

用C語言編二分查找

#includestdio.h

#includestdlib.h

#includetime.h

void xuanzhe(int a[], int n)

{

int i, j, min, t;

for (i=0; in-1; i++) /*要選擇的次數:0~n-2共n-1次*/

{

min = i; /*假設當前下標為i的數最小,比較后再調整*/

for (j=i+1; jn; j++)/*循環找出最小的數的下標是哪個*/

{

if (a[j] a[min])

{

min = j; /*如果后面的數比前面的小,則記下它的下標*/

}

}

if (min != i) /*如果min在循環中改變了,就需要交換數據*/

{

t = a[i];

a[i] = a[min];

a[min] = t;

}

}

}

int main(){

int i,n,x;

int mid,left=0,right=999;

int find1=0,find2=0;

double y;

int a[1000];

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

a[i]=rand();

}

xuanzhe(a,1000);

scanf("%d",x);

printf("順序查找:\n");

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

while(x==a[i]){

printf("找到X=%d,a[%d]\n",x,i);

find1=1;

break;

}

}

if(find1==0){

printf("沒有你要找的數\n");

}

printf("%fs\n",clock()/CLOCKS_PER_SEC);

y=clock();

printf("二分查找:\n");

while(!find2leftright)

{

mid=(left+right)/2;

if(x==a[mid])

find2=1;

else if(xa[mid])

right=mid-1;

else left=mid+1;

}

if(find2==1)

printf("找到x=%d ,a[%d]\n",x,mid);

else

printf("沒有你要找的數\n");

printf("%fs\n",(clock()-y)/CLOCKS_PER_SEC);

}

用C語言創建一個二分查找函數

排序(冒泡)

void(student*tmp,int size)

{

for(int j=0;jn-1;j++)

{

for(k=0;kn-1-j;k++)

{

if(strcmp(tmp[k].name,tmp[k+1].name)0)

{

student tm=tmp[k];

tmp[k]=tmp[k+1];

tmp[k]=tm;

}

}

}

}

int findOn(student*test,char*name,int begin,int end)

{

if(beginend)

{

return -1;//沒找到

}

int mid=end+((end-begin)/2);

if(strcmp(test[mid].name,name)==0)

{

return mid;

}elseif((strcmp(test[mid].name,name)0)

{

return findOn(test,name,mid+1,end);

}else

{

return findOn(test,name,begin,mid-1);

}

}

int find(student *test,int size,char* studentname)

{

return findOn(test,strudentname,0,size-1);

}

find(student,3000,"testname");

再來一個快速排序

void quickSort(student *test arr,int startPos, int endPos)

{

int i,j;

student key;

key=arr[startPos];

i=startPos;

j=endPos;

while(ij)

{

while(strcmp(arr[j].name,key.name)=0 ij)--j; //第一個比他小

{

student tmp=arr[i];

arr[i]=arr[j]; //moveed

arr[j]=tmp;

i++;

}

while((strcmp(arr[i].name,key.name)=0 ij)++i; //第一個比他大,

{

student tmp=arr[j];

arr[j]=arr[i];

arr[i]=tmp;

j--;

}

}

arr[i]=key; //賦值

if(i-1startPos) quickSort(arr,startPos,i-1);

if(endPosi+1) quickSort(arr,i+1,endPos);

}

quicksort(test,0,3000-1);

find(student,3000,"testname");

C語言遞歸函數如何實現二分搜索算法

折半查找法也稱為二分查找法,它充分利用了元素間的次序關系,采用分治策略,可在最壞的情況下用O(log n)完成搜索任務。它的基本思想是,已知一個有n個元素的有序序列, 將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2]則找到x,算法終止。如果xa[n/2],則我們只要在數組a的左半部繼續搜索x(這里假設數組元素呈升序排列)。如果xa[n/2],則我們只要在數組a的右半部繼續搜索x, 直到找到x或者是沒有找到!

如果是常規的方法的話那么我們可以通過循環的方式, 按照上面說的算法, 找到則退出循環, 否則繼續循環直到左下標位置小于或者等于右下標的位置.

按兄弟你的意思是要用遞歸方法進行搜索, 那么大概還是上面的算法, 只是把循環的方式改成遞歸方式: 如果沒找到,則確定新的搜索范圍, 即左右下標新位置, 然后把新的參數傳給函數繼續調用函數進行遞歸搜索!!

遞歸方式實現詳細代碼如下:

#include stdio.h

#define ARRAY_SIZE 10

#define NOT_FOUND -1

int BinarySearch(int array[], int left, int right, int NumToSearch)

{

int mid = (left + right) / 2;

if (left = right)

{

if (NumToSearch == array[mid])

{

return mid;

}

else if (NumToSearch array[mid])

{

right = mid - 1;

return BinarySearch(array, left, right, NumToSearch);

}

else

{

left = mid + 1;

return BinarySearch(array, left, right, NumToSearch);

}

}

return NOT_FOUND;

}

int main()

{

int a[ARRAY_SIZE] = {2, 5, 6, 7, 13, 20, 22, 27, 112, 222};//假設一個已知的有序且是升序數列

int result = 0;//查找的結果

int x = 13;//假設我們要查找的數是13

int left = 0;//序列開始下標

int right = ARRAY_SIZE - 1;//序列結尾下標

result = BinarySearch(a, left, right, x);

if (result == NOT_FOUND)

{

printf("Not Found!\n");

}

else

{

printf("Found %d in array a, it is a[%d]\n", x, result);

}

return 0;

}

希望對兄弟你有幫助!

用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語言編程二分查找

好久不寫了

寫一個程序,建立N元整型數組,然后輸入查找的整數x,查找x是否包含在數組中,查找用函數實現,若查找成功,返回x在數組中的第一次出現的下標,查找失敗,返回-1

源程序:

#include"stdio.h"

#define N 10

int locate(int a[N],int x)

{int h,r,m;

h=0;r=N-1;m=(h+r)/2;

while(h=rx!=a[m])

if(xa[m]) {r=m-1;m=(h+r)/2;}

else {h=m+1;m=(h+r)/2;}

if(hr) return -1; /*查找失敗,返回-1*/

return m; /*查找成功,返回有效下標m */

}

void upinsert(int a[],int i) /*插入排序 (升序)*/

{int x,j;

x=a[i];j=i-1;

while(j=0a[j]x) {a[j+1]=a[j];j--;}

a[j+1]=x;

}

void main()

{int a[N],x,k,n;

printf("input %d integers:\n",N);

for(k=0;kN;k++) {scanf("%d",a+k);upinsert(a,k);}

printf("input x=") ;scanf("%d",x);

n=locate(a,x);

for(k=0;kN;k++) printf("%4d",a[k]);

printf("\n fist position=%d\n",n);

}

沒有錯誤,我試過了

網頁題目:c語言中文二分搜索函數 C語言二分搜索
路徑分享:http://vcdvsql.cn/article4/dooddoe.html

成都網站建設公司_創新互聯,為您提供網站維護自適應網站微信小程序搜索引擎優化外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管