一位數組的應用--查找

1.  順序查找

  當被查找的數據無序排列時,只能採用順序查找法進行查找。順序查找算法的思想是:對待查數據x一一與被查數據(數組元素)進行比較,直到找到與待查數據相等的數據並返回數組元素的下標;如果找不到,則返回-1.

例1:順序查找

 

#include<stdio.h>

main(){

int a[10]={1,12,23,34,45,56,77,86,94,6};

int num,i=0;

printf("please input a number:/n");

scanf("%d",&num);

while(a[i]!=num&&i<10){

i++;

}

    if((i-1)==9)

printf("沒有找到%d/n",num);

else

printf("查找到%d,在%d的位置/n",num,i);

 

}

2.  二分查找

當被查找的數據有序排列時(已按從大到小或從小到大的順序排列),可採用二分法進行查找。

例2:二分查找

#include<stdio.h>

#define N 4

main(){

int a[N]={1,3,5,7},x,i;

int low=0,upper=N-1,mid,found;

printf("運行結果爲:/n");

printf("數組a[%d]:/n",N);

for(i=0;i<N;i++)

printf("%5d",a[i]);//輸出數組中的元素值

printf("/n輸入查找值:/n");

scanf("%d",&x);

if(x==a[low]) found=1;

else if(x==a[upper]) found=1;

else

while(low<=upper){

mid=(low+upper)/2;

if(x==a[mid]) 

{

found=1;

break;

}

else if(x>a[mid]) low=mid+1;

else

upper=mid-1;

}

if(low>upper) found=0;

if(found!=0)

printf("%d已找到!/n",x);

else

printf("%d未找到!/n",x);

}

 

例3:查找10個數中的最大值

 

#include<stdio.h>

#define N 10

main(){

int a[N],i,max,temp;

printf("please input ten number:/n");

for(i=0;i<N;i++)

scanf("%d",&a[i]);

printf("show the numbers you have input:/n");

for(i=0;i<N;i++)

printf("%-5d",a[i]);

printf("/n");

max=a[0];

for(i=0;i<N;i++){

if(max<a[i])

max=a[i];

}

printf("the maximum is %d/n",max);

}

 

例4:把一個整數插入已排好序的數組中,並使該數組元素仍按原有順序排列。

算法思路:爲了插入數據後,不改變數組原有的排列順序,應首先確定排列是按從大到小還是從小到大進行的。設排序是按從大小小順序進行的,則可把與插入的數與數組中個數逐個進行比較,當找到第一個比插入數小的的元素i時,可確定該元素之前即爲插入位置。然後從數組最後一個元素開始到該元素爲止,逐個後移一個單元。最後把插入數賦予元素i即可。如果被插入數比所有的元素都小則插入到數組的最後位置。

#include<stdio.h>

#define N 8

main(){

//int a[N]={23,34,55,67,72,80,96};

int i,insert,j=0,temp;

int a[N];

printf("請輸入%d個數組:/n",N-1);

for(i=0;i<N-1;i++)

scanf("%d",&a[i]);

printf("元數組中的元素爲:/n");

for(i=0;i<N-1;i++){//輸出數組a[N-1]的值

printf("%-5d",a[i]);

}

printf("/n");

for(i=0;i<N-1;i++)

for(j=i+1;j<N-1;j++)

if(a[i]>a[j])

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

printf("排序後的元數組中的元素爲:/n");

for(i=0;i<N-1;i++){//輸出數組a[N-1]的值

printf("%-5d",a[i]);

}

printf("/n請輸入一個整數:/n");

scanf("%d",&insert);

while(j<N-1 && a[j]<insert)

j++;

if(j==N-2) a[N-1]=insert;

else{

for(i=N-2;a[i]>insert;i--){//從後向前賦值

a[i+1]=a[i];

}

if(j==0)//判斷時候插入到首位置

a[0]=insert;

else

a[i+1]=insert;

}

printf("插入後的元素順序爲:/n");

for(i=0;i<N;i++)

printf("%-5d",a[i]);

printf("/n");

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章