當前位置:首頁 » 操作系統 » 查找演算法的流程圖

查找演算法的流程圖

發布時間: 2022-05-14 05:25:40

① 宿舍管理系統軟體查找部分的演算法流程圖

摘要

② 計算機搜索演算法的一般過程是什麼

一般採用的都是二分查找吧,時間復雜度O(log n),算是比較快的了。
不過我也不太確定,你可以F12進去查看頁面源代碼分析一下。

③ 解決查找問題的演算法流程圖如圖VB

這個是"對分查找"演算法,你提問題要把代碼分行寫,這樣人家很難看清楚,應該象如下所示:
'===================================================================
Private Sub Command1_Click()
Dim key As String , i As Integer
Dim j As Integer , found As Boolean
i = 1: j = 200 : found = False
(1)
Do While i <= j And Not found
m = Int((i + j) / 2)
If cno(m) = key
Then found = True
ElseIf (2) Then
i = m + 1
Else
j = m – 1
End If
Loop
If Not found Then
Text2.Text = "找不到"
Else
Text2.Text = cno(m)
End If
End Sub
程序中劃線處(1)應填入
程序中劃線處(2)應填入
'===================================================================
代碼中最後第二行那個「End If」,是我幫你2上去了,另外數組的名稱前面是cno,後面是cnum,
我改為cno了。
顯然,key沒有賦值,所以(1)處應該是通過鍵盤輸入要查找的數值:
Key = Val(InputBox("請輸入要找的數值。")
而對分查找,需要數組是有序的,可以升序也可以降序,你沒有告訴我題目是如何說的?
如果數組是升序的:
(2)應該是:cno(m) < key
如果數組是降序的:
(2)應該是:cno(m) > key
顯然,這只是程序的一部分,因為其它部分必須處理數組的建立,排序等。
這個問題,應該是教科書上的問題,好好學習吧,否則沒法工作!

④ 求助:二分查找演算法流程圖,在Raptor中實現該演算法

二分查找演算法流程圖,實現核演算法

⑤ 設計從5個不同的數中找出最大數的演算法,並畫出流程圖.

略 演算法步驟如下: (1)輸入 , , , , ; (2)將 與 中的大數記作b; (3)將b與 比較大小,大數記作b; (4)將b與 比較大小,大數記作b; (5)將b與 比較大小,大數記作b; (6)輸出b.流程圖如圖: 在上述的3個關鍵步驟中,每一步都要與上一步中得到的最大數b進行比較,得出新的最大數,將其也記作b.b可以取不同的值.

⑥ 程序設計問題,查找演算法性能研究,幫下忙謝啦

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
static const int ARRAY_MAX = 10000;
typedef int DataType;
class SequentialStorage
{
public:
DataType data[ARRAY_MAX];
int top;
SequentialStorage()
{
top = -1;
}
void insertData(DataType data)
{
if(top == ARRAY_MAX-1)
return;
this->data[++top] = data;
}
int find(DataType data)
{
for(int i = 0;i <= top;i++)
{
if(this->data[i] == data)
return i;
}
return -1;
}
};
class OrderlySequenceStorage
{
public:
DataType data[ARRAY_MAX];
int top;
OrderlySequenceStorage()
{
top = -1;
}
void insertData(DataType data)//插入排序
{
if(top == ARRAY_MAX-1)
return;
int i = top;
while(this->data[i] > data&&i != -1)
{
this->data[i+1] = this->data[i];
i--;
}
this->data[i+1] = data;
top++;
}
int find(DataType data)//普通查找
{
for(int i = 0;i <= top;i++)
{
if(this->data[i] == data)
return i;
}
return -1;
}
int find2(DataType data)//二分法
{
if(this->data[0] > data||this->data[top] < data)
return -1;
if(this->data[0] == data)
return 0;
if(this->data[top] == data)
return top;
int a = 0;
int b = top;
while(true)
{
if(a == b-1)
return -1;
if(this->data[(a+b)/2] == data)
return (a+b)/2;
else if(this->data[(a+b)/2] < data)
a = (a+b)/2;
else
b = (a+b)/2;
}
}
};
typedef struct node
{
DataType data;
struct node *pNext;
}LLSNode;
class LinkedListStorage
{
public:
LLSNode *pHead;
LinkedListStorage()
{
pHead = NULL;
}
void insertData(DataType data)
{
LLSNode *p = (LLSNode *)malloc(sizeof(LLSNode));
p->data = data;
p->pNext = pHead;
pHead = p;

}
LLSNode *find(DataType data)
{
LLSNode *p = pHead;
while(p)
{
if(p->data == data)
return p;
p = p->pNext;
}
return NULL;
}
};
typedef struct node2
{
DataType data;
struct node2 *lchild,*rchild;
}BSTNode;
class BinarySortTree
{
public:
BSTNode *pRoot;
BinarySortTree()
{
pRoot = NULL;
}
void insertData(DataType data)
{
BSTNode *f,*p = pRoot;
while(p)
{
f = p;
if(data < p->data)
p = p->lchild;
else
p = p->rchild;
}
p = (BSTNode *)malloc(sizeof(BSTNode));
p->data = data;
p->lchild = NULL;
p->rchild = NULL;
if(pRoot == NULL)
pRoot = p;
else
if(data < f->data)
f->lchild = p;
else
f->rchild = p;
}
BSTNode *find(DataType data)
{
if(pRoot == NULL)
return NULL;
else
return recursion(data,pRoot);
}
BSTNode *recursion(DataType data,BSTNode *p)
{
if(data == p->data||p == NULL)
return p;
else if(data < p->data)
return recursion(data,p->lchild);
else
return recursion(data,p->rchild);
}
void print()
{
if(pRoot != NULL)
printR(pRoot);
}
void printR(BSTNode *p)
{
if(p->lchild != NULL)
printR(p->lchild);
printf("%d\t",p->data);
if(p->rchild != NULL)
printR(p->rchild);
}
};

class CPUTime
{
public:
_int64 getCPUCycleCount(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
long long arr[1000];
int count;
long long lastCPUCycleCount;
int randCount;
CPUTime()
{
for(int i = 0;i < 1000;i++)
arr[i] = 0;
count = -1;
lastCPUCycleCount = getCPUCycleCount();
randCount = 0;
}
void setTimePoint()
{
arr[++count] = getCPUCycleCount()-lastCPUCycleCount;
lastCPUCycleCount = getCPUCycleCount();
}
int rand()
{
randCount++;
int temp = getCPUCycleCount()%20000;
return (temp*(randCount+temp))%10007;
}
};

int main()
{

SequentialStorage ss;
OrderlySequenceStorage oss;
LinkedListStorage lls;
BinarySortTree bst;
DataType temp1;
CPUTime cpuTime;
for(int i = 0;i < 2000;i++)
{
temp1 = cpuTime.rand();
ss.insertData(temp1);
oss.insertData(temp1);
lls.insertData(temp1);
bst.insertData(temp1);
}
DataType temp[7];
for(int i = 0;i < 7;i++)
temp[i] = ss.data[cpuTime.rand()%2000];
cpuTime.setTimePoint();
for(int i = 0;i < 7;i++)
{
ss.find(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
oss.find(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
oss.find2(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
lls.find(temp[i]);
cpuTime.setTimePoint();
}
for(int i = 0;i < 7;i++)
{
bst.find(temp[i]);
cpuTime.setTimePoint();
}

int count = 1;
printf("各項存儲結構查找已存在數據的時間(cpu周期):\n");
printf("儲存方式\t\t數據1\t數據2\t數據3\t數據4\t數據5\t數據6\t平均\n");
int a[9];
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("順序存儲\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("有序順序存儲(普通)\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("有序順序存儲(二分法)\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("鏈表存儲\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);
for(int i = 1;i < 8;i++)
a[i] = (int)cpuTime.arr[count++];
a[8] = (a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7;
printf("二叉排序樹存儲\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]);

system("pause");

}

//我按照課題的要求寫的c++具體實現的代碼,樓主可以編譯運行著試試,你可以參考一下
//我這搜索的是儲存結構里已存在的數據,你也可以按題目的要求用隨機生成的數據
//樓主留下qq吧,我等會把流程圖發給你
//至於其他的,樓主還是自己試著寫寫看吧

⑦ 演算法流程圖怎麼畫

演算法流程圖繪制方法:

1、根據具體的步驟先畫出流程圖的形狀,然後在裡面填上事情的發展順序;

2、在紙上的畫法是一樣的,先根據事情的發展順序畫出具體的圖案,然後在裡面填上事情的發展順序;

3、在電腦上操作比較簡單,數據也比較清晰,在紙上畫電腦的流程圖的時候先將具體的數據分析清楚之後在按照步驟畫出來。

流程在畫的時候非常的考驗人的數字總結能力,需要有清晰的邏輯將事物的發展過程敘述清楚,再將整個事件總結成幾個主要的過程,根據過程的條數在電腦上面畫出具體的發展流程。

一般在電腦上的流程圖畫起來比較方便,因為在電腦上操作的時候一些數據可以直接從上面計算。先總結出開始和結尾的具體過程,總結好之後在電腦上面畫出具體的流程圖圖標,將事情的發展經過填到圖標裡面,流程圖在做的時候還要有很好的思維發散能力,根據具體發生的某一件事,做出事情的原因,經過,預測的結果。

手繪流程圖過程和電腦上一樣,都是需要思考過事情的起因,經過,結果,將發展過程畫在紙上就可以,畫的時候注意事情的發展順序不要出現錯誤。

(7)查找演算法的流程圖擴展閱讀:

演算法流程圖的基本結構:

1、順序結構

順序結構是最簡單的一種基本結構。

2、選擇結構

根據給定的條件p是否成立而選擇執行A和B。p條件可以是「x>0」或「x>y」等。注意,無論p條件是否成立,只能執行A或B之一,不可能既執行A又執行B。無論走哪一條路徑,在執行完A或B之後將脫離選擇結構。A或B兩個框中可以有一個是空的,即不執行任何操作。

3、循環結構

又稱重復結構,即反復執行某一部分的操作。有兩類循環結構:

當型(While):當給定的條件p成立時,執行A框操作,然後再判斷p條件是否成立。如果仍然成立,再執行A框,如此反復直到p條件不成立為止。此時不執行A框而脫離循環結構。

直到型(Until):先執行A框,然後判斷給定的p條件是否成立。如果p條件不成立,則再執行A,然後再對p條件作判斷。如此反復直到給定的p條件成立為止。此時脫離本循環結構。

⑧ 演算法流程圖怎麼做

第一步解決算術的核心

⑨ 求查找演算法(折半查找法,順序查找法,分別在一個程序里)「動畫演示」程序源代碼,一共兩個源代碼

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

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

折半查找法是效率較高的一種查找方法。假設有已經按照從小到大的順序排列好的五個整數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,說明沒有此數,列印找不到信息,程序結束。

函數實現如下:

bin_search(intA[],intn,intkey){
intlow,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(A[mid]==key)returnmid;
if(A[mid]<key){
low=mid+1;
}
if(A[mid]>key){
high=mid-1;
}
}
return-1;
}
C語言實現代碼
#include<stdio.h>intmain()
{
inta[11]={0,1,2,3,4,5,6,7,8,9,10},min=0,max=10,mid,n;//max為數列長度,a[0]作為第一個數組元素
printf("請輸入您要查找的數: ");
scanf("%d",&n);
while(min+1!=max)
{
mid=(min+max)/2;
if(n>a[mid])min=mid;
elseif(n<a[mid])max=mid;
else
{
printf("輸入的數在數列的第%d位 ",mid);
exit(0);
}
}
if(n==a[max])
{
max+=1;
printf(" 輸入的數在數列的第%d位 ",max);
}
elseif(n==a[min])
{
min+=1;
printf(" 輸入的數在數列的第%d位 ",min);
}
elseif(n!=a[mid])
printf(" 輸入的數不在數列中");
}
Dev-c++實現
#include<stdio.h>
#include<stdlib.h>
voidmain()
{
inta[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,15};
intn,m,top,bot,mid;
top=m=1;//此處修改top=0;m=1;
bot=14;
printf("pleaseinputanumber:");
scanf("%d",&n);
while(top<=bot)
{
mid=(top+bot)/2;
if(n==a[mid])
{
printf("這是第%d個元素的值。 ",mid+1);
m=0;
break;
}
elseif(n>a[mid])
top=mid+1;
elseif(n<a[mid])
bot=mid-1;
}
if(m)
printf("無此數。 ");
system("PAUSE");
return0;
}

順序查找是按照序列原有順序對數組進行遍歷比較查詢的基本查找演算法。

對於任意一個序列以及一個給定的元素,將給定元素與序列中元素依次比較,直到找出與給定關鍵字相同的元素,或者將序列中的元素與其都比較完為止。

函數實現如下:

intsq_search(keytypekeyp[],intn,keytypekey)
{
inti;
for(i=0;i<n;i++)
if(key[i]==key)
returni;//查找成功
return-1;//查找失敗
}

上面只是演算法實現函數,對於動畫部分,自己用moveto,lineto描點劃線的方式實現吧。

熱點內容
我的世界迪士尼神奇寶貝伺服器地址 發布:2024-10-10 09:03:02 瀏覽:556
win7存儲並顯示 發布:2024-10-10 09:02:30 瀏覽:551
oracle資料庫導出 發布:2024-10-10 08:34:56 瀏覽:363
androidn特性 發布:2024-10-10 08:30:41 瀏覽:729
存儲過程修改記錄 發布:2024-10-10 08:23:28 瀏覽:58
呱呱編程 發布:2024-10-10 08:12:54 瀏覽:895
androidoa 發布:2024-10-10 08:07:14 瀏覽:894
安卓手機怎麼關掉開了的游戲 發布:2024-10-10 07:50:14 瀏覽:681
idea新建java類 發布:2024-10-10 07:50:12 瀏覽:71
教務處的賬號和密碼是什麼 發布:2024-10-10 07:47:51 瀏覽:790