Week 1 of DAA in CPP

Iterative Linear Search


#include<iostream>
using namespace std;

int iterativeLinearSearch(int arr[], int size, int key){
  for(int i = 0;i<size;i++)
    if(arr[i]==key) return i;
  return -1;
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int i=0;i<n;i++){
    cin>>arr[i];
  }
  int key;
  cout<<"Enter key : ";
  cin>>key;
  int index = iterativeLinearSearch(arr,n,key);
  if(index == -1){
    cout<<"Element not found";
  }
  else{
    cout<<"Element found on index "<<index;
  }
}


Recursive Linear Search


#include<iostream>
using namespace std;

int recursiveLinearSearch(int arr[], int size, int key){
  if(size <= 0) return -1;
  if(arr[size-1] == key) return size-1;
  return recursiveLinearSearch(arr, size-1, key);
} 

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int i=0;i<n;i++){
    cin>>arr[i];
  }
  int key;
  cout<<"Enter key : ";
  cin>>key;
  int index = recursiveLinearSearch(arr,n,key);
  if(index == -1){
    cout<<"Element not found";
  }
  else{
    cout<<"Element found on index "<<index;
  }
}


Iterative Binary Search


#include<iostream>
using namespace std;

#define swap(a,b) (a=a+b-(b=a))

void sortArray(int arr[], int size){
  for(int i=0;i<size;i++)
    for(int j=0;j<size-i-1;j++)
      if(arr[j] > arr[j+1]) swap(arr[j], arr[j+1]);
}

int iterativeBinarySearch(int arr[],int size, int key){
  int low=0,high=size-1;
  while(low<=high){
    int mid = (low+high)/2;
    if(arr[mid] == key) return mid;
    if(arr[mid] > key) high = mid-1;
    if(arr[mid] < key) low = mid+1;
  }
  return -1;
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int i=0;i<n;i++){
    cin>>arr[i];
  }
  int key;
  cout<<"Enter key : ";
  cin>>key;
  sortArray(arr,n);
  int index = iterativeBinarySearch(arr,n,key);
  if(index == -1){
    cout<<"Element not found";
  }
  else{
    cout<<"Element found on index "<<index;
  }
}


Recursive Binary Search


#include<iostream>
  using namespace std;

  #define swap(a,b) (a=a+b-(b=a))

  void sortArray(int arr[], int size){
    for(int i=0;i<size;i++)
      for(int j=0;j<size-i-1;j++)
        if(arr[j] > arr[j+1]) swap(arr[j], arr[j+1]);
  }

  int recursiveBinarySearch(int arr[], int key,int low, int high){
  if(low > high) return -1;
  int mid = (low+high)/2;
  if(arr[mid] == key) return mid;
  if(arr[mid] > key) return  recursiveBinarySearch(arr,key,low,mid-1);
  return recursiveBinarySearch(arr,key,mid+1,high);
  }

  int main(){
    int n;
    cin>>n;
    int low=0,high=n-1;
    int arr[n];
    for(int i=0;i<n;i++){
      cin>>arr[i];
    }
    int key;
    cout<<"Enter key : ";
    cin>>key;
    sortArray(arr,n);
    int index = recursiveBinarySearch(arr,key,low,high);
    if(index == -1){
      cout<<"Element not found";
    }
    else{
      cout<<"Element found on index "<<index;
    }
  }


Bubble Sort


#include<iostream>
using namespace std;

#define swap(a,b) (a=a+b-(b=a))

void bubbleSort(int arr[], int size){
  for(int i=0;i<size;i++)
   for(int j=0;j<size-i-1;j++)
    if(arr[j] > arr[j+1]) swap(arr[j],arr[j+1]);
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int i=0;i<n;i++) cin>>arr[i];
  for(int i=0;i<n;i++) cout<<arr[i]<<" ";
  bubbleSort(arr,n);
  cout<<endl;
  for(int i=0;i<n;i++) cout<<arr[i]<<" ";
  return 0;
}


Insertion Sort


#include<iostream>
using namespace std;

void insertionSort(int arr[], int size){
  int key,j;
  for(int i=1;i<size;i++){
    key = arr[i];
    j = i-1;
    while(j>=0 && (arr[j] > key)) arr[j+1] = arr[j--];
    arr[j+1] = key;
  }
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int i=0;i<n;i++) cin>>arr[i];
  for(int i=0;i<n;i++) cout<<arr[i]<<" ";
  insertionSort(arr,n);
  cout<<endl;
  for(int i=0;i<n;i++) cout<<arr[i]<<" ";
  return 0;
}


Selection Sort


#include<iostream>
using namespace std;

#define swap(a,b) (a=a+b-(b=a))

void selectionSort(int arr[],int size){
 for(int i=0;i<size-1;i++){
  int min_index = i;
  for(int j=i+1;j<size;j++) 
    min_index = (arr[min_index] > arr[j])?j:min_index;
  swap(arr[i],arr[min_index]);
 }  
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int &x:arr) cin>>x;
  for(int x:arr) cout<<x<<" ";
  selectionSort(arr,n);
  cout<<endl;
  for(int x:arr) cout<<x<<" ";
  return 0;
}


Quick Sort


#include<iostream>
using namespace std;

#define swap(a,b) (a=a+b-(b=a))

int partition(int arr[], int start, int end){
  int pivot = arr[start];
  int i = start+1;
  int j = end;
  while(i<j){
    while(i<=end && arr[i] <= pivot) i++;
    while( j>=start && arr[j] > pivot) j--;
    if(i<j) swap(arr[i],arr[j]);
  }
  swap(arr[start],arr[j]);
  return j;
}

void quickSort(int arr[], int start, int end){
  if(start>=end) return;
    int partition_index = partition(arr,start,end);
    quickSort(arr,partition_index+1,end);
    quickSort(arr,start,partition_index-1);
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int &x:arr) cin>>x;
  for(int x:arr) cout<<x<<" ";
  quickSort(arr,0,n-1);
  cout<<endl;
  for(int x:arr) cout<<x<<" ";
  return 0;
}


Merge Sort


#include<iostream>
using namespace std;

#define BUFFER 100
void merge(int arr[],int mid, int low, int high){
  int temp[BUFFER];
  int i=low,j=mid+1,k=0;
  while(i<=mid && j<=high)
    temp[k++] = (arr[i] <= arr[j])?arr[i++]:arr[j++];
  while(i<=mid) temp[k++] = arr[i++];
  while(j<=high) temp[k++] = arr[j++];
  for(int i=low,x=0;i<=high;i++,x++) arr[i] = temp[x];
}

void mergeSort(int arr[],int low, int high){
  if(low>=high) return;
  int mid = (low+high)/2;
  mergeSort(arr,low,mid);
  mergeSort(arr,mid+1,high);
  merge(arr,mid,low,high);
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int &x:arr) cin>>x;
  for(int x:arr) cout<<x<<" ";
  mergeSort(arr,0,n-1);
  cout<<endl;
  for(int x:arr) cout<<x<<" ";
  return 0;
}


Count Sort


#include<iostream>
using namespace std;

#define MAX(x,y) ((x>y)?x:y)

void countSort(int arr[],int size){
  int max = arr[0];
  for(int i=0;i<size;i++) max = MAX(max,arr[i]);
  int temp[max+1]={0};
  for(int i=0;i<size;i++) temp[arr[i]]++;
  int i=0,j=0;
  while(i<=max){
    if(temp[i]-- > 0) arr[j++] = i;
    else i++;
  }
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int &x:arr) cin>>x;
  for(int x:arr) cout<<x<<" ";
  countSort(arr,n);
  cout<<endl;
  for(int x:arr) cout<<x<<" ";
  return 0;
}



Radix Sort


#include<iostream>
using namespace std;

#define max(x,y) ((x>y)?x:y)

void countingSort(int arr[], int size, int pos){
  int output[size],temp[10]={0};
  for(int i=0;i<size;i++) temp[(arr[i]/pos)%10]++;
  for(int i=1;i<10;i++) temp[i] += temp[i-1];
  for(int i=size-1;i>=0;i--) output[temp[(arr[i]/pos)%10]---1] = arr[i];
  for(int i=0;i<size;i++) arr[i] = output[i];
}

void radixSort(int arr[], int size){
  int m = arr[0];
  for(int i=0;i<size;i++) m=max(m,arr[i]);
  for(int pos=1;m/pos>0;pos*=10){
    countingSort(arr,size,pos);
  }
}

int main(){
  int n;
  cin>>n;
  int arr[n];
  for(int &x:arr) cin>>x;
  for(int x:arr) cout<<x<<" ";
  radixSort(arr,n);
  cout<<endl;
  for(int x:arr) cout<<x<<" ";
  return 0;
}


Comments

Popular Posts