當前位置:首頁 » 編程語言 » c語言中快速順序查找法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中快速順序查找法

發布時間: 2022-07-23 06:10:36

『壹』 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語言順序查找法

當t=9時,發現滿足t<=9所以繼續執行if(a[t]==x) break; 這句執行完之後,執行t++,此時t=10。t=10不滿足t<=9,所以退出循環。

最簡單的理解方式是,循環的條件是t<=9,要退出循環,t>=10才行,所以判斷的是 if(t==10) printf("not found!");

『叄』 c語言順序查找

在這個程序中,輸入的10個數字,是以空格 隔開的。如果想用逗號隔開,會比較麻煩。
既然上面是空格隔開的,下面倒數第三行printf("%d in %d",key,i);key和i用空格隔開不用逗號是不行的。這是程序語句規定的,各輸出項之間必須要用逗號分隔。這個與上面所說的運行時輸入各數據用什麼分隔(它是可以指定的)是兩碼事。

『肆』 用類c描述順序查找演算法

順序查找法就是,把給出的數據,和數組中的每一個數據進行比較,發現相同的數據時,把該數據,在數組中的位置返回回來。
目的是,為了查找到相關的數據位置,然後根據這個位置,進行下一步操作。
這個或許能幫助你更好的解決問題:
http://jingyan..com/article/d169e186aa0d28436711d879.html

『伍』 如何用C語言順序查找程序

#include<stdio.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,x,y;
printf("輸入你要查找的數:\n");
scanf("%d",&x);
y=0; //標記是否已找到,y=1表是找到了,y=0表示沒找到
for(i=0;i<10;i++) //循環,把x和數組中的元素一個個比較
{
if(x==a[i]) //如果x=a[i]說明已經找到
{
y=1; //把y變成1,說明已經找到了
printf("你要查找的數%d在第個%d位置\n",x,i+1); //輸出找到的相關信息
break; //跳出循環
}
}
if(y==0)printf("無法找到你要查找的數\n"); //y=0表示找不到
}

『陸』 C語言順序查找程序

//順序查找
//思路:從表中最後一個記錄開始,逐個進行記錄的關鍵字和
//給定值的比較,若某個記錄的關鍵字和給定值比較相等,則
//返回返回記錄所在的位置,或查找完所有記錄後還沒有發現
//符合的記錄,則查找失敗。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 10

typedef int DataType;//定義比較的元素類型

//靜態查找表的順序存儲結構
typedef struct{
DataType * data;//數據元素存儲空間基址,按實際長度分配,0號單元留空
//建表時按實際長度分配,0 號單元留空
int length;//表長度
}SSTable;

//創建一個靜態表,內容為20以內的隨機數
void createST(SSTable* ST,int n){
int i;
time_t t;
if(ST!=NULL){
ST->data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST->data!=NULL){
srand((unsigned) time(&t));
for(i=1;i<=n;i++){
ST->data[i]=rand() ;//產生20以內的隨機數
}
ST->length=n;
}
}
}

//創建一個靜態表,內容按從小到大排列,以便折半查找
void createST_binary(SSTable* ST,int n){
int i,j=0;
time_t t;
if(ST!=NULL){
ST->data=(DataType*)calloc(n+1,sizeof(DataType));
if(ST->data!=NULL){
for(i=1;i<=n;i++){
ST->data[i]=j;
j+=4;
}
ST->length=n;
}
}
}

//列印出靜態表的內容
void print_SSTable(SSTable* ST){
int i,n=ST->length;
if(ST!=NULL){
for(i=1;i<=n;i++){
printf("%d ",ST->data[i]);
}
printf("\n");
}
}

//順序查找(Sequential Search)
//思路:從表中最後一個記錄開始,逐個進行記錄的關鍵字和
//給定值的比較,若某個記錄的關鍵字和給定值比較相等,則
//返回返回記錄所在的位置,或查找完所有記錄後還沒有發現
//符合的記錄,則查找失敗。
//查找成功:返回記錄所在位置
//查找失敗:返回0
int search_seq(SSTable ST,DataType key){
int i;
if(ST.data==NULL)return 0;
ST.data[0]=key;//設置監視哨。目的在於免去查找過程中每一步都要檢測整
//個表是否查找完畢,是一個很有效的程序設計技巧 。監視
//哨也可以設在高下標處。
for(i=ST.length;ST.data[i]!=key;i--);
return i;
}

//折半查找(Binary Search)
//當記錄的key按關系有序時可以使用折半查找
//思路:對於給定key值,逐步確定待查記錄所在區間,每次將搜索空間減少一半(折半),
//直到查找成功或失敗為止。
int search_binary(SSTable ST,DataType key){
int low,high,mid;
low=1;
high=ST.length;
while(low<=high){//當表空間存在時
mid=(low+high)/2;
if(ST.data[mid]==key){
return mid;//查找成功,返回mid
}
if(key<ST.data[mid]){
high=mid-1;//繼續在前半區間查找
}else{
low=mid+1;//繼續在後半區間查找
}
}
return 0;//查找失敗
}

//分塊查找(只記錄思想)
//分塊查找中,設記錄表長為n,將表的n個記錄分成b=n/s個塊,每個s個記錄
//最後一個記錄數可以少於s個,且表分塊有序,即後一個塊的所有key值大於
//前一個塊的所有key值
//每塊對應一個索引項,索引項記錄了該塊記錄的最大key值和該塊第一記錄的指針(或序號)
//演算法:
//(1)由索引表確定待查找記錄所在的塊;
//(2)在塊內順序查找。

int main(){
int n=20;//在20個數中查找,方便看結果,不要設置得太大
SSTable ST,ST_binary;//分別用於順序查找和折半查找的靜態表
index indtb[n+1];//索引表,用於分塊查找
createST(&ST,n);//創建一個隨機靜態表
createST_binary(&ST_binary,n);//創建一個從小到大順序排列的靜態表

//採用順序查找
printf("原始數據:");
print_SSTable(&ST);
printf("順序查找5的結果:%d\n",search_seq(ST,5));
printf("順序查找10的結果:%d\n",search_seq(ST,10));
printf("順序查找12的結果:%d\n",search_seq(ST,12));
printf("順序查找15的結果:%d\n",search_seq(ST,15));
printf("順序查找20的結果:%d\n",search_seq(ST,20));

printf("--------------------------------------------\n");
//採用折半查找
printf("原始數據:");
print_SSTable(&ST_binary);
printf("折半查找5的結果:%d\n",search_binary(ST_binary,5));
printf("折半查找10的結果:%d\n",search_binary(ST_binary,10));
printf("折半查找12的結果:%d\n",search_binary(ST_binary,12));
printf("折半查找15的結果:%d\n",search_binary(ST_binary,15));
printf("折半查找20的結果:%d\n",search_binary(ST_binary,20));

system("pause");//暫停一下,看看結果
free(ST.data);//不要忘了釋放堆空間
return 0;
}

『柒』 c語言簡單的排序和查找有些什麼辦法

希爾排序,插入排序很簡潔,也比較容易理解,快速排序,歸並排序和堆排序要快一點,代碼量相當多點,比較難理解。查找就不太了解了

『捌』 c語言順序查找法

如果是在已有n個元素的數組a中順序查找值為x的元素,以下是實現查找的函數代碼,查找成功則返回此元素的位置,否則返回-1:
int find(int a[],int n,int x)
{int i;
for(i=0;i<n&&a[i]!=x;i++);
return i<n?i:-1;
}

『玖』 C語言順序查找;

#include<stdio.h>
#include<string.h>
typedef struct
{
char name[100];
char studentID[100];
char major[100];
char grade[100];
}student;

int main()
{
FILE *stdinf;
stdinf=fopen("studentinf.txt","r");
char ID[100],inf[100];
int x,y,z,i,a,b;
student st;
printf("please input the studentID you want to search(0123456789):\n");
gets(ID);
while((fgets(inf,100,stdinf))!=NULL)
{
for(x=0,y=0,i=0;x<strlen(inf);x++,y++)
{
if(ID[x]==inf[y])
{
i++;
}
if(i==10)
{
for(a=0,b=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.studentID[a]=inf[b];
}
st.studentID[a]='\0';
b++;
for(a=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.name[a]=inf[b];
}
st.name[a]='\0';
b++;
for(a=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.major[a]=inf[b];
}
st.major[a]='\0';
b++;
for(a=0;b<=strlen(inf)&&inf[b]!='*';a++,b++)
{
st.grade[a]=inf[b];
}
st.grade[a]='\0';
printf("studentID is:%s\n",st.studentID);
printf("student's name is:%s\n",st.name);
printf("student's major is:%s\n",st.major);
printf("student's grade is:%s\n",st.grade);
break;
}
}
}
fclose(stdinf);
return 0;
}

『拾』 用C語言編寫順序查找和二分查找(折半查找)

#include<stdio.h>
#defineLENGTH20

voidSequenceSearch(int*fp,intLength);
voidSearch(int*fp,intlength);
voidSort(int*fp,intlength);

voidmain()
{
intcount;
intarr[LENGTH];

printf("請輸入你的數據的個數: ");
scanf("%d",&count);
printf("請輸入%d個數據 ",count);
for(inti=0;i<count;i++)
{
scanf("%d",&arr[i]);
}

intchoise=0;
do
{
printf("1.使用順序查詢. 2.使用二分查找法查找. 3.退出 ");
scanf("%d",&choise);

if(choise==1)
SequenceSearch(arr,count);
elseif(choise==2)
Search(arr,count);
elseif(choise==3)
break;
}while(choise==1||choise==2||choise==3);
}

voidSequenceSearch(int*fp,intLength)
{
intdata;
printf("開始使用順序查詢. 請輸入你想要查找的數據. ");
scanf("%d",&data);

for(inti=0;i<Length;i++)
if(fp[i]==data)
{
printf("經過%d次查找,查找到數據%d. ",i+1,data);
return;
}

printf("經過%d次查找,未能查找到數據%d. ",i,data);
}

voidSearch(int*fp,intlength)
{
intdata;
printf("開始使用順序查詢. 請輸入你想要查找的數據. ");
scanf("%d",&data);
printf("由於二分查找法要求數據是有序的,現在開始為數組排序. ");
Sort(fp,length);
printf("數組現在已經是從小到大排列,下面將開始查找. ");

intbottom,top,middle;

bottom=0;
top=length;

inti=0;
while(bottom<=top)
{
middle=(bottom+top)/2;
i++;
if(fp[middle]<data)
{
bottom=middle+1;
}
elseif(fp[middle]>data)
{
top=middle-1;
}
else
{
printf("經過%d次查找,查找到數據%d. ",i,data);
return;
}
}
printf("經過%d次查找,未能查找到數據%d. ",i,data);
}

voidSort(int*fp,intlength)
{
printf("現在開始為數組排序,排列結果將是從小到大. ");

inttemp;
for(inti=0;i<length;i++)
for(intj=0;j<length-i-1;j++)
if(fp[j]>fp[j+1])
{
temp=fp[j];
fp[j]=fp[j+1];
fp[j+1]=temp;
}

printf("排序完成! 下面輸出排序後的數組: ");
for(intk=0;k<length;k++)
{
printf("%5d",fp[k]);
}
printf(" ");

}