Linked List Nama Dgn Shell Sort

Shell sort yaitu metode pengurutan yang merupakan hasil modifikasi dari pengurutan insertion. Kelemahan metode insertion adalah membandingkan setiap field dari array walaupun ternyata posisi telah tepat di posisi misalkan kedua. Kelemahan dari metode insertion telah ditambal dengan adanya shell sort.
Langsung ke kodenya aja ye..

#include "stdio.h"
#include "stdlib.h"
#include "conio2.h"
#define maks_nama 100
#define panjang_nama 100

void create_nama(char *nama);
void destroy_nama(char *nama);
void menu_pilihan(char nama[maks_nama][panjang_nama], int n);
void urut_nama(char nama[maks_nama][panjang_nama], int n);
void search_nama(char nama[maks_nama][panjang_nama], int n);
void isi_nama(char nama[maks_nama][panjang_nama], int *n);
char *nama_terkecil(char nama[maks_nama][panjang_nama], int n);
char *nama_terbesar(char nama[maks_nama][panjang_nama], int n);
void tampil_nama(char nama[maks_nama][panjang_nama], int n);

int main(int argc, char *argv[])
{
  char nama[maks_nama][panjang_nama];
  int i,n;

  create_nama(nama);
  menu_pilihan(nama,n);
  system("PAUSE");
  return 0;
}

void create_nama(char *nama)
{
     int i;

     for(i=0; i<=maks_nama;i++)
     {
          strcpy(&nama[i]," ");
     }
}

void destroy_nama(char *nama)
{
     int i;

     for(i=0; i<=maks_nama; i++)
     {
          strcpy(&nama[i]," ");
     }
}

void menu_pilihan(char nama[maks_nama][panjang_nama], int n)
{
    int pilih,ketemu;

    ketemu = 0;
    while(pilih!=0)
    {
        clrscr();
        gotoxy(17,4);printf("|-------------------------------------------|\n");
        gotoxy(17,5);printf("|               MENU PILIHAN                |\n");
        gotoxy(17,6);printf("|-------------------------------------------|\n");
        gotoxy(17,7);printf("|         [ 1 ] Input Nama                  |\n");
        gotoxy(17,8);printf("|         [ 2 ] Tampil Nama                 |\n");
        gotoxy(17,9);printf("|         [ 3 ] Cari Nama                   |");
        gotoxy(17,10);printf("|         [ 0 ] Keluar                      |");
        gotoxy(17,11);printf("|-------------------------------------------|");
        gotoxy(17,12);printf("|         Pilihan Anda :                    |");
        gotoxy(17,13);printf("|-------------------------------------------|");
        gotoxy(44,12);scanf("%i",&pilih);
        while(pilih3)
        {
             gotoxy(19,15);printf("Anda salah memasukan nomor menu pilihan");
             getch();
             gotoxy(19,15);clreol();
             gotoxy(44,12);clreol();
             gotoxy(61,12);printf("|");
             gotoxy(44,12);scanf("%i",&pilih);

        }

        switch(pilih)
        {
           case 1 : clrscr();
                    isi_nama(nama,&n);
                    break;

           case 2 : clrscr();
                    if(n!=0)
                       tampil_nama(nama,n);
                    else{
                       gotoxy(23,12);printf("Anda belum memasukan data, ulangi !!!!");
                       getch();}
                    break;

           case 3 : clrscr();
                    if(n!=0)
                       search_nama(nama,n);
                    else
                       {gotoxy(23,12);printf("Anda belum memasukan data, ulangi !!!!");
                       getch();}
                    break;
           case 0 : destroy_nama(nama);
                    exit(0);
        }

    }
}

void urut_nama(char nama[maks_nama][panjang_nama], int n)
{
    char temp[maks_nama][panjang_nama];
    int i, j, step;

        step = 3;
        while (step > 0)
        {
           for (i=0; i = step) && strcmp(nama[j-step],temp)==1)
              {
                  strcpy(nama[j], nama[j - step]);
                  j = j - step;
              }
              strcpy(nama[j], temp);
           }

           if (step/2 != 0)
              step = step/2;
           else if (step == 1)
              step = 0;
           else
              step = 1;
        }
}

void isi_nama(char nama[maks_nama][panjang_nama], int *n)
{
     int i;

     gotoxy(17,4);printf("|-------------------------------------------|");
     gotoxy(17,5);printf("|          MENU PILIHAN INPUT NAMA          |");
     gotoxy(17,6);printf("|-------------------------------------------|");
     gotoxy(17,7);printf("|       Berapa banyak nama :                |");
     gotoxy(17,8);printf("|-------------------------------------------|");
     gotoxy(46,7);scanf("%i",n);
     for(i=0; i&lt;*n; i++)
     {
         gotoxy(17,9+i);printf("|  Nama ke-%i                     ",i+1);
         gotoxy(32,9+i);printf(":");
         gotoxy(61,9+i);printf("|");
         gotoxy(35,9+i);fflush(stdin);gets(nama[i]);

     }
     gotoxy(17,9+i);printf("|-------------------------------------------|");
     gotoxy(17,9+i+1);printf("|          %i nama telah tersimpan          ",*n);
     gotoxy(61,9+i+1);printf("|");
     gotoxy(17,9+i+2);printf("|-------------------------------------------|");
     getch();
}

void search_nama(char nama[maks_nama][panjang_nama], int n)
{
     char *nama_cari[maks_nama][panjang_nama];
     int i;

     urut_nama(nama,n);

     gotoxy(17,4);printf("|-------------------------------------------|");
     gotoxy(17,5);printf("|          MENU PILIHAN CARI NAMA           |");
     gotoxy(17,6);printf("|-------------------------------------------|");
     gotoxy(17,7);printf("|         Masukan Nama Yang Dicari          |");
     gotoxy(17,8);printf("|");
     gotoxy(61,8);printf("|");
     gotoxy(17,9);printf("|-------------------------------------------|\n");
     gotoxy(35,8);fflush(stdin);gets(*nama_cari);

     i=0;
     while((i<n) &amp;&amp; strcmpi(nama_cari,nama[i])==1)
     {
         i++;
     }

     if (strcmpi(nama_cari,nama[i])==0)
        {
            gotoxy(17,10);printf("|");
            gotoxy(22,10);printf("   Nama %s ada pada data ke %i  ",nama_cari,i+1);
            gotoxy(61,10);printf("|");
        }
     else
         {
            gotoxy(17,10);printf("|");
            gotoxy(22,10);printf("    Nama %s tidak ada pada data  ",nama_cari);
            gotoxy(61,10);printf("|");
         }

     gotoxy(17,11);printf("|-------------------------------------------|");
     gotoxy(17,12);printf("|     Ada %i nama yang telah tersimpan       |",n);
     gotoxy(17,13);printf("|-------------------------------------------|");

     for(i=0; i<n; i++)
     {
       gotoxy(17,14+i);printf("|    Nama ke-%i      ",i+1);
       gotoxy(36,14+i);printf("%s",&nama[i]);
       gotoxy(34,14+i);printf(":");
       gotoxy(61,14+i);printf("|");
     }
     gotoxy(17,14+i);printf("|-------------------------------------------|");
     getch();
}

char *nama_terkecil(char nama[maks_nama][panjang_nama], int n)
{
     int i;
     char *min[maks_nama][panjang_nama];

     strcpy(&min[maks_nama][panjang_nama],nama[0]);
     for(i=1; i<n; i++)
     {
         if(strlen(nama[i]) <= strlen(&min[maks_nama][panjang_nama]))
         {
             strcpy(&min[maks_nama][panjang_nama],nama[i]);
         }
     }

     return &min[maks_nama][panjang_nama];
}

char *nama_terbesar(char nama[maks_nama][panjang_nama], int n)
{
     int i;
     char *max[maks_nama][panjang_nama];

     strcpy(&max[maks_nama][panjang_nama],nama[0]);
     for(i=1; i= strlen(&max[maks_nama][panjang_nama]))
         {
             strcpy(&max[maks_nama][panjang_nama],nama[i]);
         }
     }

     return &max[maks_nama][panjang_nama];
}

void tampil_nama(char nama[maks_nama][panjang_nama], int n)
{

    int i;
    char *max[maks_nama][panjang_nama];
    char *min[maks_nama][panjang_nama];

    clrscr();
    gotoxy(17,4);printf("|-------------------------------------------|");
    gotoxy(17,5);printf("|        MENU PILIHAN TAMPIL NAMA           |");
    gotoxy(17,6);printf("|-------------------------------------------|");
    urut_nama(nama,n);
    for(i=0; i<n; i++)
    {
       gotoxy(17,7+i);printf("|    Nama ke-%i     %s         ",i+1,&nama[i]);
       gotoxy(33,7+i);printf(":");
       gotoxy(61,7+i);printf("|");
    }
    gotoxy(17,7+i);printf("|-------------------------------------------|");
    gotoxy(17,7+i+1);printf("| Nama Terpanjang : %s             ",nama_terbesar(nama,i));
    gotoxy(61,7+i+1);printf("|");
    gotoxy(17,7+i+2);printf("|-------------------------------------------|");
    gotoxy(17,7+i+3);printf("| Nama Terpendek  : %s             ",nama_terkecil(nama,i));
    gotoxy(61,7+i+3);printf("|");
    gotoxy(17,7+i+4);printf("|-------------------------------------------|");
    getch();

}
    
}

Hasil dari pengurutan adalah pengurutan nama secara ascending atau menaik. Semoga bermanfaat, silakan komentar kalo masih error.

2 thoughts on “Linked List Nama Dgn Shell Sort

Silahkan Komentar...

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s