當前位置:首頁 » 編程語言 » c語言查找演算法

c語言查找演算法

發布時間: 2022-06-04 02:26:13

『壹』 c語言的折中查找法的演算法

#include <stdio.h>
#define N 21
void main(void)
{
int a[N];
int i,n,num;
int top,bottom,mid;
int flag=1; //如果在表列中找到數字,則值為1,否則為0
int loc=-1;//要查找的數在表列中的位置,如果loca=-1表示表列中沒有這個數;如果有這個數,則它的值為所在的位置

printf("你想在多少個數中進行折半查找,請輸入(1--20):");
scanf("%d",&n);

while(n<1 || n>20)
{
printf("你輸入的數不正確,請重新輸入。\n");
printf("你想在多少個數中進行折半查找,請輸入(1--20):");
scanf("%d",&n);
}

printf("請你輸入一個整數 a[1]:");
scanf("%d",&a[1]);

i=2;
while(i<=n) //輸入從小到大的表列
{
printf("請你輸入一個整數 a[%d]:",i);
scanf("%d",&a[i]);
if(a[i] > a[i-1])
i++;
else
printf("你輸入的數不滿足要求,請重新輸入。\n");
}

//輸出表列
printf("\n輸出表列\n");
for(i=1; i<=n; i++)
{
printf("%6d",a[i]);
}
printf("\n");

printf("請你輸入要查找的數:");
scanf("%d",&num);

flag=1; //假設輸入的數在表列中

top=n;
bottom=1;
mid=(top+bottom)/2;

while(flag)
{
printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]);
if( (num>a[top]) || (num<a[bottom]) ) //輸入的數 num>a[top] 或者 num<a[bottom],肯定num不在這個表列中
{
loc=-1;
flag=0;
}
else if(a[mid]==num) //如果num 等於找到的數
{
loc=mid;
printf("找到數 %6d 的位置%2d\n",num,loc);
break;
}
else if(a[mid]>num) //若 a[mid]>num,則num 一定在 a[bottom]和a[mid-1]范圍之內
{
top=mid-1;
mid=(top+bottom)/2;
}
else if(a[mid]<num) //若 a[mid]<num,則num 一定在 a[mid+1]和a[top]范圍之內
{
bottom=mid+1;
mid=(top+bottom)/2;
}
}

if(loc==-1)
{
printf("%d 這個數在表列中沒有找到。\n",num);
}
printf("折半查找結束:");
scanf("%d",&n);
}

『貳』 c語言演算法有哪些

這里整理c語言常用演算法,主要有:
交換演算法
查找最小值演算法
冒泡排序
選擇排序
插入排序
shell排序 (希爾排序)
歸並排序
快速排序
二分查找演算法
查找重復演算法

『叄』 c語言折半查找法

折半查找法是演算法一種,可以被任何計算機語言使用。用C語言自然也可以實現。

1、定義:

在計算機科學中,折半搜索(英語:half-interval search),也稱二分搜索(英語:binary search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索演算法。

搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。這種搜索演算法每一次比較都使搜索范圍縮小一半。

2、查找規則:

折半查找法是效率較高的一種查找方法。假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查找的數是X,其基本思想是: 設查找數據的范圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用X與中點元素am比較,若X等於am,即找到,停止查找;否則,若X大於am,替換下限l=m+1,到下半段繼續查找;若X小於am,換上限h=m-1,到上半段繼續查找;如此重復前面的過程直到找到或者l>h為止。如果l>h,說明沒有此數,列印找不到信息,程序結束。

3、C語言參考代碼:

intbin_search(intA[],intn,intkey){
//在長度為n的數組A中折半查找值為key的元素,並返回下標值。如果不存在則返回-1.
intlow,high,mid;
low=0;
high=n-1;//初始low和high為數組的兩端。
while(low<=high)
{
mid=(low+high)/2;//查找中心點。
if(A[mid]==key)returnmid;//已找到,返回下標值。
if(A[mid]<key){//中點位置比key值小,以mid+1為新的下限值。
low=mid+1;
}
if(A[mid]>key){//中點位置比key值大,以mid-1為新的上限值。
high=mid-1;
}
}
return-1;//未找到,返回-1.
}

『肆』 C語言中的折半查找法是什麼

折半查找的前提是已經對數據做好了排序,然後再折半查找
例如排序後的數據是1 5 12 35 64 78 89 123 456
你要查找12,首先用12跟上面排好順序的9個數中間那個比較(64),12<64,因此你查找的數據在前半部分,即
1 5 12 35 64,再用12跟前半部分中間那個數比較(12),這樣找了2次就找到了
折半查找的目的是提高查找的效率 折半查找法也稱為二分查找法,它充分利用了元素間的次序關系,採用分治策略,可在最壞的情況下用O(log n)完成搜索任務。
【基本思想】
將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2]則找到x,演算法終止。如果x<a[n/2],則我們只要在數組a的左半部繼續搜索x(這里假設數組元素呈升序排列)。如果x>a[n/2],則我們只要在數組a的右半部繼續搜索x。
二分搜索法的應用極其廣泛,而且它的思想易於理解。第一個二分搜索演算法早在1946 年就出現了,但是第一個完全正確的二分搜索演算法直到1962年才出現。Bentley在他的著作《Writing Correct Programs》中寫道,90%的計算機專家不能在2小時內寫出完全正確的二分搜索演算法。問題的關鍵在於准確地制定各次查找范圍的邊界以及終止條件的確定,正確地歸納奇偶數的各種情況,其實整理後可以發現它的具體演算法是很直觀的。 剛開始的時候數組時排好順序的:從小到大,或者從大到小。然後將這個數組折中,用中間的這個數和要查找的數比較大小,(例如:如果我從小到大,我將數組這種後,用中間的數和要查找的數比較,如果小

『伍』 誠求用C語言編一個實現常見查找演算法。

折半查找,數組存放的是從31到3的奇數,按從大到小的順序放入
#include <stdio.h>
void main()
{
int array[15];
int i,number;
int top,end,half,temp;
top = 0;
end = 15;
temp = 0;
half = (top + end) / 2;
for(i = 0;i < 15;i++)
array[i] = 2 * (15 - i) + 1;
printf("please input the number:\n");
scanf("%d",&number);
if(number > array[0] || number < array[14])
printf("the array hasn't the number!\n");
else
{
while(top != end)
{
if(array[half] > number)
top = half;
else if(array[half] < number)
end = half;
else
{
printf("the number is the %d number of array!\n",half + 1);
break;
}
temp = half;
half = (top + end) / 2; //折半查詢
if(temp == half)
{
printf("the array hasn't the number!\n");
break;
}
}
}
}

『陸』 c語言排序和查找

1)利用readData()函數從data1.txt中讀入不同規模的數據存入數組,
編寫基於數組的順序查找演算法,測試數據量為1萬、5萬、10萬、20萬、
30萬、40萬和50萬時的數據查詢時間。
演算法代碼如下:

1 int seqsearch(int a[],int n,int key)
2 {
3 int k=n-1;
4 while(k>=0&&a[k]!=key)
5 k--;
6 return (k);
7 }

2)利用readData()函數從data2.txt中讀入不同規模的有序數據存入數組,
編寫基於數組的二分查找演算法,測試數據量為1萬、5萬、10萬、20萬、30萬、
40萬和50萬時的數據查詢時間。
演算法代碼如下:

1 int binSearch(int a[],int n,int key)
2 {
3 int low=0;
4 int high=n-1;
5 int mid;
6 while(low<=high)
7 {
8 mid=(low+high)/2;
9 if(a[mid]==key) return mid;
10 if(a[mid]>key)
11 high=mid-1;
12 else
13 low=mid+1;
14 }
15 return -1;
16 }

3)請設計冒泡排序演算法函數void bubbleSort(int a[],int n),對a[1]..a[n]進行升序排序。
並測試在不同數據規模下的排序效率。
演算法代碼如下:


1 void bubbleSort(int a[],int n)
2 {
3 int i=1,j,flag=1;
4 while(i<=n-1&&flag)
5 {
6 flag=0;
7 for(j=1;j<=n-1-i;j++)
8 if(a[j+1]<a[j])
9 {
10 a[0]=a[j];
11 a[j]=a[j+1];
12 a[j+1]=a[0];
13 flag=1;
14 }
15 i++;
16 }
17 }

『柒』 C語言常用演算法中,查找無序數列的演算法有哪些

對於無序的你只能從尾(倔一點,呵呵)開始找了,要不就像上面那老兄說,先排序好再查找,對於數據量大的,那樣效率顯著!而且排好序查找的方法很多,如折半,FIBONACCI查找(利用數組1,1,2,3,,5,8...的特殊性,你可以上下網路見識下人家的思路), 相信你能懂哦

熱點內容
安卓最新怎麼調靈敏度更穩 發布:2025-02-09 09:12:44 瀏覽:399
豌豆莢如何用安卓手機下載 發布:2025-02-09 09:11:57 瀏覽:212
吃雞腳本輔助 發布:2025-02-09 09:09:29 瀏覽:5
sessionidpython 發布:2025-02-09 09:08:53 瀏覽:275
華為手機驗證碼和密碼忘了是多少 發布:2025-02-09 08:53:53 瀏覽:798
逆戰筆記哪個配置好玩 發布:2025-02-09 08:53:04 瀏覽:599
怎麼打開電腦雲伺服器 發布:2025-02-09 08:36:01 瀏覽:219
日元對人民幣演算法 發布:2025-02-09 08:35:52 瀏覽:39
安卓手機微信語音怎麼不能轉文 發布:2025-02-09 08:25:30 瀏覽:922
c上機編程題 發布:2025-02-09 08:17:18 瀏覽:319