Searching dan Sorting (Bahasa Pemgoraman C)

Sorting 


Bubble Sorting

# Proses pengurutannya berdasarkan perbandingan item di sebelahnya
# Biasanya perbandingannya dilakukan dari belakang
# Akan melakukan sebanyak n-1 cycle


Coding dalam bahasa C:

#include <stdio.h>



void swapz (int *a,int *b)
{
int c = *b;
*b = *a;
*a = c;
}


int main()
{
  int array[100], n, c, d, swap;

  printf("Enter number of elements\n");
  scanf("%d", &n);

  printf("Enter %d integers\n", n);

  for (c = 0; c < n; c++)
  {
      scanf("%d", &array[c]); //ingat untuk selalu menggunakan for untuk scan dan print elemen atau maximal index
  }


  for (c = 0 ; c < n - 1; c++)
  {
    for (d = 0 ; d < n - c - 1; d++)
    {
      if (array[d] > array[d+1]) /* urutan ascending < */
      {
        swapz(&array[d],&array[d+1]);
      }
    }
  }

  printf("Sorted list in ascending order:\n");

  for (c = 0; c < n; c++)
  {
      printf("%d ", array[c]);
  }


  return 0;
}




Selection Sorting

# Satu index membanding - bandingkan index yang lain sampai menemukan index yang lebih kecil atau lebih besar
# Prosesnya berupa tukar menukar dengan index yang berhubungan (lebih keci/besar)
# Akan melakukan sebanyak n-1 cycle


Coding dalam bahasa C :

void selectionsorting(int arr[], int n)
{
    int i, j, min;
  
   
    for (i = 0; i < n-1; i++)
    {
        min = i;
        for (j = i+1; j < n; j++)
          if (arr[j] < arr[min])
            min = j;

        swap(&arr[min], &arr[i]);
    }
}

Insertion Sorting

# Proses nya menggunakan temp atau sebuah tempat untuk menyimpan bilangan lalu ditaruh di index yang tepat.

void insertionSort(int arr[], int n)
{
   int i, key, j;
   for (i = 1; i < n; i++)
   {
       key = arr[i];
       j = i-1;
  
       /* Move elements of arr[0..i-1], that are
          greater than key, to one position ahead
          of their current position */
       while (j >= 0 && arr[j] > key)
       {
           arr[j+1] = arr[j];
           j = j-1;
     }
       arr[j+1] = key;
   }
}


Menurut saya metode sorting yang paling mudah adalah bubble sorting karena dalam proses pencariannya metode itulah yang paling cepat.

Searching 

Linear Searching

# Proses pencarian satu per satu

Codingan dalam bahasa C:

*biasanya digunakan untuk mencari di dalam sebuah file*

#include <stdio.h>

int main()
{
   int array[100], search, c, n, count = 0;
 
   printf("Masukkan jumlah maksimum elemen dalam array\n");
   scanf("%d", &n);
 
   printf("Masukkan angka sebanyak %d\n", n);
 
   for (c = 0; c < n; c++)
   {
    scanf("%d", &array[c]);
   }
   
   printf("Enter a number to search\n");
   scanf("%d", &search);
 
   for (c = 0; c < n; c++)
   {
      if (array[c] == search)
   {
         printf("%d terdapat di baris %d.\n", search, c+1);
         count++;
      }
   }
   if (count == 0)
      printf("%d tidak terdapat di dalam array.\n", search);
   else
      printf("%d muncul %d kali dalam array.\n", search, count);
   
   return 0;
}

Binary Searching

# Caru nilai tengah dari sebuah index lalu dibandingkan

Codingan dalam bahasa C:

#include <stdio.h>

int main()
{
   int c, first, last, middle, n, search, array[100];

   printf("Enter number of elements\n");
   scanf("%d",&n);

   printf("Enter %d integers\n", n);

   for (c = 0; c < n; c++)
      scanf("%d",&array[c]);

   printf("Enter value to find\n");
   scanf("%d", &search);

   first = 0;
   last = n - 1;
   middle = (first+last)/2;

   while (first <= last)
   {
      if (array[middle] < search)
      {
    first = middle + 1;   
  }
       
      else if (array[middle] == search)
  {
          printf("%d found at location %d.\n", search, middle+1);
          break;
      }
      else
      {
        last = middle - 1;
  }
      middle = (first + last)/2;
   }
   if (first > last)
   {
    printf("Not found! %d isn't present in the list.\n", search);
   }
   

   return 0; 
}

Interpolation Searching 

# Key lebih besar maka ada di sebelah kanan

Codingan dalam bahasa C :

#include<stdio.h>
  

int interpolationSearch(int arr[], int n, int x)
{
    // Mencari index
    int lo = 0, hi = (n - 1);
  
    while (lo <= hi && x >= arr[lo] && x <= arr[hi])
    {
        int pos = lo + (((double)(hi-lo) /
              (arr[hi]-arr[lo]))*(x - arr[lo]));

        if (arr[pos] == x)
            return pos;

        if (arr[pos] < x)
            lo = pos + 1;
        else
            hi = pos - 1;
    }
    return -1;
}

source : https://www.geeksforgeeks.org/interpolation-search/

Comments