對(duì)c語(yǔ)言的認(rèn)識(shí)和想法 c語(yǔ)言中的折半排序法是怎樣的,基本程序是怎樣的?
c語(yǔ)言中的折半排序法是怎樣的,基本程序是怎樣的?半法應(yīng)稱為兩點(diǎn)法。如果要查找的數(shù)字是20,則數(shù)組是1478 20 30 34。每次你把中間的數(shù)字和你想比較的數(shù)字,也就是8和20比較,你會(huì)發(fā)現(xiàn)20比8大
c語(yǔ)言中的折半排序法是怎樣的,基本程序是怎樣的?
半法應(yīng)稱為兩點(diǎn)法。如果要查找的數(shù)字是20,則數(shù)組是1478 20 30 34。每次你把中間的數(shù)字和你想比較的數(shù)字,也就是8和20比較,你會(huì)發(fā)現(xiàn)20比8大,所以你不需要左邊的數(shù)字,剩下的數(shù)字是20 30如果你拿20和30,你會(huì)發(fā)現(xiàn)20比30小。如果你取20和20相等,你就會(huì)找到它。如果不是,返回-1。這是程序。#半搜索法也稱為二進(jìn)制搜索法。它充分利用了元素之間的順序關(guān)系,采用分治策略,在最壞情況下可以用O(logn)完成搜索任務(wù)。例如,排序后的數(shù)據(jù)是15 12 35 64 78 89 123 456。如果要查找12,請(qǐng)先將12與上述9個(gè)數(shù)字中的中間數(shù)字(64)進(jìn)行比較,12< 64按上述順序排列,因此您找到的數(shù)據(jù)位于前半部分,即15 12 35 64,然后將12與前半部分的中間數(shù)字(12)進(jìn)行比較。這樣,您可以在兩次搜索后找到一半。半搜索的目的是提高搜索效率
C語(yǔ)言中的“折半查找法”是什么?
#include<stdio.h>
int seek(int*pArr,int low,int high,int num)
void main()
{
int Arr[]={1,2,3,4,5,6,7,8,9,10}
int find,num
printf(“輸入要查找的數(shù)值。n”)
scanf(“%d”,&num)
find=seek(Arr,0,9,num)
if(find==-1)printf(“num=%d未找到!n“,num)
否則printf(”num已找到!narr[%D]=%Dn,find,arr[find])]}
int seek(int*Parr,int low,int high,int Num)
]{//Parr是數(shù)組的名稱。數(shù)組必須按順序排列(這是二分法的要求),這里按從小到大的順序排序
int mid
mid=(低-高)/2
if((低>=高)&(Parr[mid]!=Num))
return-1
]{
]if(Parr[mid]==Num)
return mid
]else if(Parr[mid]>num)
high=mid 1//中間數(shù)大于要檢查的數(shù),表示它可能在中間段之前
else
Low=mid-1//同上,它可能在中間段之后
return seek(Parr,low,high,Num)//遞歸
}]}