> For the complete documentation index, see [llms.txt](https://mun.gitbook.io/c/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mun.gitbook.io/c/c/ch7/basic-array-operation/searching/linear-search.md).

# Linear Search

## Linear Search

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0;
    
    print_array(a, current_size);
    key = 10;
    //key = 15;
    
    for(i=0; i<current_size ; i++){
        if(a[i] == key){
            printf("Found\n");
        }
    }    
    
    return 0;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Break Once Element Found

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 10, 40, 50}, current_size = 5, i = 0, n;
    int key = 0;
    
    print_array(a, current_size);
    key = 10;
    //key = 15;
    
    for(i=0; i<current_size ; i++){
        if(a[i] == key){
            printf("Found\n");
            break;
        }
    }   
    
    return 0;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Test Element Not Found

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    key = 10;
    //key = 15;
    
    for(i=0; i<current_size ; i++){
        if(a[i] == key){
            printf("Found\n");
            flag = 1;
        }
    }
    if(flag==0){
        printf("Not Found\n");
    }    
    
    return 0;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Search Using Flag

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    key = 10;
    //key = 15;
    
    for(i=0; i<current_size ; i++){
        if(a[i] == key){
            flag = 1;
        }
    }
    if(flag==1){
        printf("Found\n");
    }
    else{
        printf("Not Found\n");
    }   
    
    return 0;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Search Using Index

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, index = -1;
    
    print_array(a, current_size);
    key = 10;
    //key = 15;
    
    for(i=0; i<current_size ; i++){
        if(a[i] == key){
            index = i;
        }
    }
    if(index==-1){
        printf("Not Found\n");
    }
    else{
        printf("Found\n");
    }   
    
    return 0;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Search Using Function

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);
void search_array(int *array, int current_size, int key);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    search_array(a, current_size, key = 10);
    search_array(a, current_size, key = 15); 
    
    return 0;
}

void search_array(int *array, int current_size, int key){
    int i;
    for(i=0; i<current_size ; i++){
        if(array[i] == key){
            printf("Found\n");
            return;
        }
    }
    printf("Not Found\n");
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Return Truth Value from Search Function

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);
int search_array(int *array, int current_size, int key);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    
    if(search_array(a, current_size, key = 10)){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    }
    
    if(search_array(a, current_size, key = 15)){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    } 
    
    return 0;
}

int search_array(int *array, int current_size, int key){
    int i;
    for(i=0; i<current_size ; i++)
        if(array[i] == key)
            return 1;
    return 0;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Return Index from Search Function (Recommended)

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);
int linear_search(int *array, int current_size, int key);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    
    if(linear_search(a, current_size, key = 10)!=-1){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    }
    
    if(linear_search(a, current_size, key = 15)!=-1){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    } 
    
    return 0;
}

int linear_search(int *array, int current_size, int key){
    int i;
    for(i=0; i<current_size ; i++)
        if(array[i] == key)
            return i;
    return -1; // -1 Indecate Invalid Index, i.e. Key Element Not Found
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Recursive Linear Search

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);
int recursive_linear_search(int *array, int current_size, int key);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    
    if(recursive_linear_search(a, current_size, key = 10)!=-1){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    }
    
    if(recursive_linear_search(a, current_size, key = 15)!=-1){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    } 
    
    return 0;
}

int recursive_linear_search(int *array, int current_size, int key){
    if(current_size < 0)
        return -1; // -1 Indecate Invalid Index, i.e. Key Element Not Found
    else if(array[current_size] == key)
        return current_size;
    return recursive_linear_search(array, current_size-1, key);
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Recursive Linear Search (Alternative Approach)

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);
int recursive_linear_search(int *array, int start, int end, int key);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 40, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    
    if(recursive_linear_search(a, 0, current_size, key = 10)!=-1){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    }
    
    if(recursive_linear_search(a, 0, current_size, key = 15)!=-1){
        printf("Found\n");
    }else{
        printf("Not Found\n");
    } 
    
    return 0;
}

int recursive_linear_search(int *array, int start, int end, int key){
    if(start > end)
        return -1; // -1 Indecate Invalid Index, i.e. Key Element Not Found
    else if(array[start] == key)
        return start;
    return recursive_linear_search(array, start+1, end, key);
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```

## Last Element Index for Multiple Occurrences of Element

```c
#include<stdio.h>
#define TOTAL_SIZE 10
void print_array(int *array, int current_size);
int search_last_element_index(int *array, int current_size, int key);

int main(){
    int a[TOTAL_SIZE] = {10, 20, 30, 10, 50}, current_size = 5, i = 0, n;
    int key = 0, flag = 0;
    
    print_array(a, current_size);
    
    printf("%d\n", search_last_element_index(a, current_size, key = 10)); // 3
    printf("%d\n", search_last_element_index(a, current_size, key = 15)); // -1
    
    return 0;
}

int search_last_element_index(int *array, int current_size, int key){
    int i, last_index = -1;
    for(i=0; i<current_size; i++){
        if(array[i] == key){
            last_index = i;
        }
    }
    return last_index;
}

void print_array(int *array, int current_size){
    int i;
    if(current_size==0){
        printf("Array is Empty\n");
    }else{
        printf("Array Elements are: ");
        for(i=0; i<current_size; i++){
            printf("%d ", array[i]);
        }
        printf("\n");
    }
}
```
