各種基本演算法實現小結(六)—— 尋找演算法

來源:互聯網
上載者:User

各種基本演算法實現小結(六)—— 尋找演算法

(均已測試通過)

===================================================================

 

1、簡單尋找

在一組無序數列中,尋找特定某個數值,並返回其位置pos

測試環境:VC 6.0 (C)

#include <stdio.h><br />#include <stdlib.h><br />#include <time.h><br />#define MAX 101<br />void input(int num[])<br />{<br />int i;</p><p>srand((unsigned)time(NULL));<br />for(i=1; i<MAX; i++)<br />num[i]=rand()%100;<br />}<br />void output(int num[])<br />{<br />int i;</p><p>for(i=1; i<MAX; i++)<br />{<br />printf("%5d", num[i]);<br />if(0==i%10)<br />printf("/n");<br />}<br />}<br />int find(int num[], int x)<br />{<br />int i;<br />for(i=1; i<MAX; i++)<br />if(x == num[i])<br />return i;<br />return 0;<br />}<br />void main()<br />{<br />int x, pos, num[MAX];<br />input(num);</p><p>printf("num...: /n");<br />output(num);</p><p>printf("Enter find num: ");<br />scanf("%d", &x);<br />pos=find(num, x);<br />if(pos)<br />printf("OK! %d is found in pos: %d/n", x, pos);<br />else<br />printf("Sorry! %d is not found... in num/n", x);<br />}<br />

運行結果:

 

==========================================================

2、 折半尋找

在有序數列中,逐步縮小尋找範圍,直至找到或找不到記錄為止

本演算法首先隨機產生100個無序數列,然後利用快速排序演算法排序成有序數列,然後再用折半尋找演算法

說明:本演算法中的排序演算法,可用上一篇排序演算法中的任一種演算法實現,如選擇排序、冒泡排序、快速排序等

 

測試環境:VC 6.0 (C)

#include <stdio.h><br />#include <stdlib.h><br />#include <time.h><br />#define MAX 101<br />void input(int num[])<br />{<br />int i;</p><p>srand((unsigned)time(NULL));<br />for(i=1; i<MAX; i++)<br />num[i]=rand()%100;<br />}<br />void output(int num[])<br />{<br />int i;</p><p>for(i=1; i<MAX; i++)<br />{<br />printf("%5d", num[i]);<br />if(0==i%10)<br />printf("/n");<br />}<br />}<br />void sort(int num[], int low, int high) /* quick sort */<br />{<br />int l, h;</p><p>if(low<high)<br />{<br />l=low;<br />h=high;<br />num[0]=num[l]; /* save pivot */</p><p>while(l<h)<br />{<br />while(l<h && num[h]>=num[0]) h--;<br />num[l]=num[h];<br />while(l<h && num[l]<=num[0]) l++;<br />num[h]=num[l];<br />}<br />num[l]=num[0]; /* insert pivot */</p><p>sort(num, low, l-1);<br />sort(num, l+1, high);<br />}<br />}<br />int find(int num[], int x, int low, int high)<br />{<br />int mid;</p><p>while(low<=high)<br />{<br />mid=(low+high)/2; /* find is OK */</p><p>if(x==num[mid])<br />return mid;<br />else if(x<num[mid])<br />high=mid-1;<br />else<br />low=mid+1;<br />}<br />return 0;<br />}<br />void main()<br />{<br />int x, pos, num[MAX];<br />input(num);</p><p>printf("sort before... /n");<br />output(num);<br />sort(num, 1, MAX-1);<br />printf("sort after... /n");<br />output(num);</p><p>printf("Enter find num: ");<br />scanf("%d", &x);<br />pos=find(num, x, 1, MAX-1);<br />if(pos)<br />printf("OK! %d is found in pos: %d/n", x, pos);<br />else<br />printf("Sorry! %d is not found... in num/n", x);<br />}<br />

運行結果:

  

==========================================================

 

 

參考推薦:

學習演算法之路

各種基本演算法實現小結(一)—— 鏈 表

各種基本演算法實現小結(二)—— 堆 棧

各種基本演算法實現小結(三)—— 樹與二叉樹

各種基本演算法實現小結(四)—— 圖及其遍曆

各種基本演算法實現小結(五)—— 排序演算法

各種基本演算法實現小結(六)—— 尋找演算法

各種基本演算法實現小結(七)—— 常用演算法

12個有趣的C語言面試題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.