Minggu, 07 Juni 2015

Code C : Quick and Marge (SORTING)

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define max 10
int data[max];
typedef struct{
int nip;
char nama[15];
}dtpegawai;
dtpegawai data[20];
int a=0;
void tambah_data(){
char jawab[2];
while(1){
fflush(stdin);
printf("NIP : ");scanf("%d",&data[a].nip);
fflush(stdin);
printf("Nama : ");gets(data[a].nama);
fflush(stdin);
printf("Ada data lagi (y/t):");scanf("%s",&jawab);
    if(((strcmp(jawab,"Y"))==0)||((strcmp(jawab,"y"))==0)){
      a++;continue;
    }else if (((strcmp(jawab,"T"))==0)||((strcmp(jawab,"t"))==0))
      break;
}
}

void tampil(int v){
  int i;
puts("    NIP           NAMA");
if(v==1){
for (i=0;i<=a;i++){
printf(" %d\t\t%s\n",data[i].nip,data[i].nama);
}
}else{
for (i=a;i>=0;i--){
printf(" %d\t\t%s\n",data[i].nip,data[i].nama);
}
}
}

void quicksort_nip(int L,int R){
int i,j,x;
struct dtpegawai tamp,a,b;
x=data[(L+R)/2];
i=L;
j=R;
while(i<=j){
while(data[i]<x)
i++;
while(data[j]>x)
j--;
if(i<=j){
a=data[i];b=data[j];
tamp=a;
a=b;
b=tamp;
i++;j--;;
}
}
if(L<j){
quicksort_nip(L,j);
}
if(i<R){
quicksort_nip(i,R);
}
}

void quicksort_nama(int L,int R){
int i,j,x;
struct dtpegawai tamp,a,b;
x=data[(L+R)/2];
i=L;
j=R;
while(i<=j){
while(data[i]<x)
i++;
while(data[j]>x)
j--;
if(i<=j){
a=data[i];b=data[j];
tamp=a;
a=b;
b=tamp;
i++;j--;;
}
}
if(L<j){
quicksort_nama(L,j);
}
if(i<R){
quicksort_nama(i,R);
}
}

int temp[max];
void merge(int data[], int temp[], int kiri, int tengah, int kanan){
int i,left_end,num_elements,tmp_pos;
left_end=tengah-1;
tmp_pos=kiri;
num_elements=kanan-kiri+1;
while((kiri<=left_end)&&(tengah<=kanan)){
if(data[kiri]<=data[tengah]){
temp[tmp_pos]=data[kiri];
tmp_pos=tmp_pos+1;
kiri=kiri+1;
}else{
temp[tmp_pos]=data[tengah];
tmp_pos=tmp_pos+1;
tengah=tengah+1;
}
}
while(kiri<=left_end){
temp[tmp_pos]=data[kiri];
kiri=kiri+1;
tmp_pos=tmp_pos+1;
}
while(tengah<=kanan){
temp[tmp_pos]=data[tengah];
tengah=tengah+1;
tmp_pos=tmp_pos+1;
}
for(i=0;i<=num_elements;i++){
data[kanan]=temp[kanan];
kanan=kanan-1;
}
}

void m_sort(int data[],int temp[], int kiri, int kanan){
int tengah;
if (kanan>kiri){
tengah=(kanan+kiri)/2;
m_sort(data, temp, kiri, tengah);
m_sort(data, temp, tengah+1, kanan);
merge(data, temp, kiri, tengah+1, kanan);
}
}

void mergesort(int data[], int temp[], int array_size){
m_sort(data, temp, 0, array_size-1);
}

int main(){
int metode,pb,z;
ulang :
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts("            PROGRAM PENGURUTAN DATA PEGAWAI");
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts("Masukkan data pegawai : ");
tambah_data();
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts("               PILIH METODE PENGURUTAN");
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts(" 1. QuickSort");
puts(" 2. MergeSort");
printf("Masukkan pilihan metode : ");scanf("%d",&metode);
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts("               PENGURUTAN BERDASARKAN");
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts(" 1. NIP");
puts(" 2. Nama Pegawai");
printf("Masukkan pilihan pengurutan : ");scanf("%d",&pb);
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts("                 PENGURUTAN SECARA");
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts(" 1. Ascending");
puts(" 2. Descending");
printf("Masukkan pilihan : ");scanf("%d",&z);
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
puts("                  HASIL PENGURUTAN");
puts("+++++++++++++++++++++++++++++++++++++++++++++++++++++++");
if(metode==1&&pb==1) quicksort_nip();
if(metode==1&&pb==2) quicksort_nama();
if(metode==2&&pb==1) mergesort_nip();
if(metode==2&&pb==2) mergesort_nama();
tampil(z);
getch();
return 0;
}

Tidak ada komentar:

Posting Komentar

Me

Foto saya
I'm 18 year old I'm ugly I'm lazy I do what I want I'm poor I want to learn and I want make money