Anda di halaman 1dari 30

Praktikum Pemrograman Bahasa C

SORTING
TUJUAN BELAJAR:
Setelah melakukan praktikum dalam bab ini, mahasiswa diharapkan mengerti:
1. Beberapa algoritma sorting
2. Mengetahui kelebihan dan kekurangan bermacam-macam algoritma pengurutan data yang ada
3. Memilih algoritma yang paling sesuai untuk menyelesaikan suatu permasalahan pemrograman
TUGAS PENDAHULUAN 1
1. Buatlah algoritma insertion sort
2. Buatlah algoritma selection sort
TUGAS PENDAHULUAN 2
1. Buatlah algoritma bubble sort
2. Buatlah algoritma bubble sort dengan flag
3. Buatlah algoritma shell sort
TUGAS PENDAHULUAN 3
1. Buatlah algoritma Quick sort rekursi
2. Buatlah algoritma Quick sort non rekursi
3. Buatlah algoritma Merge sort
PEMBAHASAN TUGAS PENDAHULUAN 1
1. Algoritma insertion sort
Straight Insertion sort
1. i 1
2. Selama ( i < N ) kerjakan baris 3 sampai dengan 9
3. x Data[i]
4. j i 1
5. Selama ( x < Data[j] ) kerjakan baris 6 dan 7
6. Data[j+1] Data[j]
7. j j -1
8. i i + 1
Binary Insertion sort
1. i 1
2. Selama ( i < N ) kerjakan baris 3 sampai dengan 14
3. x Data[i]
4. l 0
5. r i 1
6. Selama (l<=r) kerjakan baris 7 dan 8
7. m (l+r)/2
8. Jika (x < Data[m]) maka r m l, jika tidak l m +1
9. j i j
10. Selama (j>=1) kerjakan baris 11 dan 12
11. Data[j+1] Data[j]
12. j j - 1
13. Data[l] x
14. i i + 1
2. Algoritma selection sort
1. i 0
2. Selama (i < N-1) kerjakan baris 3 sampai dengan 9
1

Praktikum Pemrograman Bahasa C

3.
4.
5.
6.
7.
8.
9.

ki
ji+1
Selama (j<N) kerjakan baris 6 dan 7
Jika (Data[k] > Data[j]) maka k j
j j +1
Tukar Data[i] dengan Data[k]
ii+1

PEMBAHASAN TUGAS PENDAHULUAN 2


1. Algoritma bubble sort
1. i 0
2. Selama ( i<N-1 ) kerjakan baris 3 sampai dengan 7
3. j N-1
4. Selama ( j>=i ) kerjakan baris 5 sampai dengan 7
5. Jika ( Data[j-1] > Data [j] maka tukar Data[j-1] dengan Data[j]
6. j j-1
7. i i+1
2. Algoritma bubble sort dengan flag
1. i 0
2. Selama ( i<N-1 ) kerjakan baris 3 sampai dengan 7
3. j N-1
4. Selama ( j>=i ) kerjakan baris 5 sampai dengan 7
5. Jika ( Data[j-1] > Data [j] maka tukar Data[j-1] dengan Data[j]
6. j j-1
7. i i+1
3. Algoritma shell sort
1. Jarak N
2. Selama (Jarak > 1) kerjakan baris 3 sampai dengan 9
3. Jarak Jarak /2. Sudah false
4. Kerjakan baris 4 sampai dengan 8 selama sudah = false
5. Sudah true
6. j 0
7. Selama (j < N Jarak) kerjakan baris 8 dan 9
8. Jika (Data[j] > Data[j + Jarak] tukar Data[j], Data[j + Jarak]. Sudah true
9. j j + 1
PEMBAHASAN TUGAS PENDAHULUAN 3
1. Algoritma Quick sort rekursi
1. x Data[(L+R)/2]
2. i L
3. j R
4. Selama (i<=j) kerjakan baris 5 sampai dengan 12
5. Selama (Data[i] < x) kerjakan i i +1
6. Selama (Data[i] < x) kerjakan j j -1
7. Jika (i<=j) maka kerjakan baris 8 sampai dengan 10; jika tidak kerjakan baris 11
8. Tukar Data[i] dengan Data[j]
9. i i + 1
10. j j 1
11. Jika (L<j) kerjakan lagi baris 1 dengan R = j
12. Jika (i<R) kerjakan lagi baris 1 dengan L = i
2. Algoritma Quick sort non rekursi
2

Praktikum Pemrograman Bahasa C

1. Tumpukan[1].Kiri 0
2. Tumpukan[1].Kanan N -1
3. Selama ujung !=0 kerjakan baris 4 sampai dengan 22
4. L Tumpukan[ujung].Kiri
5. R Tumpukan[ujung].Kanan
6. ujung < ujung 1
7. Selama (R>L) kerjakan baris 8 sampai 22
8. i L
9. j R
10. x Data[(L+R)/2]
11. Selama i<=j kerjakan baris 12 sampai 14
12. Selama (Data[i]<x), i i +1
13. Selama (x<Data[j]), j j -1
14. Jika (i<=j) maka kerjakan baris 15 sampai baris 17, jika tidak ke baris 11
15. Tukar Data[i] dengan Data[j]
16. i < i + 1
17. j < j 1
18. Jika (L<i) kerjakan baris 19 sampai 21
19. ujung ujung +1
20. Tumpukan[ujung].Kiri = i
21. Tumpukan[ujung].Kanan = R
22. R j
3. Algoritma Merge sort
1. i 0
2. j 0
3. J3 0
4. Kerjakan baris 5 sampai dengan 7 selama (i<J1) atau (j<J2)
5. J3 J3 + 1
6. Jika (T1[i] < T2[j]) maka T3[J3] T1[i], i i + 1
7. Jika (T1[i] >= T2[j]) maka T3[J3] T1[j], j j + 1
8. Jika (i>J1) maka kerjakan baris 9, jika tidak kerjakna baris 15
9. i j
10. Selama (i<J2) kerjakan baris 11 sampai 13
11. J3 J3 + 1
12. T3[J3] T2[i]
13. i i + 1
14. Selesai
15. j i
16. Selama (j<J1) kerjakan baris 17 sampai 19
17. J3 < J3 + 1
18. T3[J3] < T1[j]
19. j < j + 1

Praktikum Pemrograman Bahasa C

SOAL-SOAL TUGAS PEMROGRAMAN


1. Rangkaian 8 macam prosedur sorting ascending di atas menjadi suatu program utuh dengan data
bilangan random sejumlah n, kemudian metode-metode yang disediakan dapat dipilih melalui
menu
2. Modifikasilah program soal no1 di atas untuk sorting descending, lakukan beberapa perubahan
kondisi penukaran datanya
3. Buatlah fungsi menyisipkan data acak yang dibangkitkan dengan fungsi random untuk data bulat
sebanyak 10000. Kemudian buatlah table yang menghitung jumlah perbandingan dan penukaran
data acak tersebut untuk metode straight insertion, binary insertion, selection, bubble, shell, quick
Metode Pengurutan
straight insertion
binary insertion
selection
bubble
shell
quick

Jumlah Pembandingan

Jumlah penukaran

1. Source code
//Ascending
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define n 100000
int i,data[n];
int a,s;int b;
void pilihan();
void cetak();
void cetak2();
void tukar();
void straight();
void binary();
void selection();
void bubble();
void quicknon();
void quickrek();
void merge();
void mergeSort();
void m_sort();
void shell();
void main()
{
char lagi;
int pilsort;
do
{

a=0;
system("cls");
4

Praktikum Pemrograman Bahasa C

printf("\n\n ============== CARA SORTING ==============\n");


printf(" 1. Straight Insertion Sort\n");
printf(" 2. Binary Insertion Sort\n");
printf(" 3. Selection Sort\n");
printf(" 4. Bubble Sort\n");
printf(" 5. Shell Sort\n");
printf(" 6. Quick Sort non Rekursif\n");
printf(" 7. Quick Sort Rekursif\n");
printf(" 8. Merge Sort\n");
printf(" ==========================================\n");
printf("\n\n Masukkan banyaknya data : ");
scanf("%d",&s);
printf("\n %c Data awal Random :\n\n",1);
//
srand(time(NULL));
for(i=0;i<s;i++)
data[i]=rand()%1000;
//printf("\t");
cetak2();
puts("");
printf(" %c Pilihan pengurutan : ",1);
scanf("%d",&pilsort);
pilihan(pilsort);

}
}

printf("\n Lakukan sorting lagi?(y/t) ");


fflush(stdin);
scanf("%c",&lagi);
while((lagi=='Y')||(lagi=='y'));

void pilihan(int pildata)


{
if(pildata==1)
{
straight();
cetak();
}
else if(pildata==2)
{
binary();
cetak();
}
else if(pildata==3)
{
selection();
cetak();
}
else if(pildata==4)
{
bubble();
cetak();
5

Praktikum Pemrograman Bahasa C

}
else if(pildata==5)
{
shell(data,s);
cetak();
}
else if(pildata==6)
{
quicknon();
cetak();
}
else if(pildata==7)
{
quickrek(0,s-1);
cetak();
}
else if(pildata==8)
{
mergeSort(data);
cetak();
}

}
void cetak2()
{
for(i=0;i<s;i++)
printf("[%3d]\t",data[i]);
puts("");
}
void cetak()
{
printf("\n
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",218,196
,196,196,196,196,194,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1
96,196,196,196,196,196,196,191);
printf("\n %c No %c\t Data urut%8c",179,179,179);
printf("\n
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",195,196
,196,196,196,196,197,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1
96,196,196,196,196,196,196,180);
for(i=0;i<s;i++)
printf("\n %c%5d%c\t%6d \t%10c",179,i+1,179,data[i],179);
puts("");
printf("
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",192,196
,196,196,196,196,193,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,1
96,196,196,196,196,196,196,217);
printf("\n Banyaknya penukaran data : %d",a);
}
void tukar(int *awal,int *akhir)
6

Praktikum Pemrograman Bahasa C

int sementara;
sementara = *awal;
*awal = *akhir;
*akhir = sementara;

void straight()
{
int j,x;
for (i=1;i<s;i++)
{
x=data[i];
j=i-1;
while(x<data[j])
{
a++;
data[j+1]=data[j];
j--;
}
data[j+1]=x;
}
}
void binary()
{
int j,l,r,m,x;
for(i=1;i<s;i++)
{
x=data[i];
l=0;
r=i-1;
while(l<=r)
{
m=(l+r)/2;
if(x<data[m])
r=m-1;
else
l=m+1;
}
for(j=i-1;j>=l;j--)
data[j+1]=data[j];
data[l]=x;
a++;
}
}
7

Praktikum Pemrograman Bahasa C

void selection()
{
int j, min;
for (i = 0; i < s; i++)
{
min = i;
for (j = i+1; j < s; j++)
{
if (data[j] < data[min])
{
min = j;
}
}
tukar(&data[i], &data[min]);
a++;
}
}
void bubble()
{
int i,j;
for(i=0;i<(s);i++)
{for(j=0;j<(s-(i+1));j++)
if(data[j] > data[j+1])
tukar(&data[j],&data[j+1]);
a++;}
}
void shell(int b[],int s)
{
int j,i,m,tengah;
for(m = s/2;m>0;m/=2)
{
for(j = m;j< s;j++)
{
for(i=j-m;i>=0;i-=m)
{
if(b[i+m]>=b[i])
break;
else
{
tengah = b[i];
b[i] = b[i+m];
b[i+m] = tengah;
}
a++;
}
}
}
}
8

Praktikum Pemrograman Bahasa C

void quicknon()
{
struct tump
{
int kiri;
int kanan;
}tumpukan[15];
int j,l,r,x,ujung=1;
tumpukan[1].kiri=0;
tumpukan[1].kanan=s-1;

while(ujung!=0)
{
l=tumpukan[ujung].kiri;
r=tumpukan[ujung].kanan;
ujung--;
while(r>l)
{
i=l;
j=r;
x=data[(l+r)/2];
while(i<=j)
{
while(data[i]<x)
i++;
while(x<data[j])
j--;
if(i<=j)
{
int sementara;
sementara = data[i];
data[i] = data[j];
data[j] = sementara;
i++;
j--;
}
}
if(l<i)
{
ujung++;
tumpukan[ujung].kiri=i;
tumpukan[ujung].kanan=r;
}
r=j;
a++;
}
}

Praktikum Pemrograman Bahasa C

void quickrek(int l,int r)


{
int j,x;
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)
{
int sementara;
sementara = data[i];
data[i] = data[j];
data[j] = sementara;
a++;
i++;
j--;
}
}
if(l<j)
quickrek(l,j);
if(i<r)
quickrek(i,r);
}
void mergeSort(int data[], int t[])
{
m_sort(data, t, 0, s - 1);
}
void m_sort(int data[], int t[], int kiri, int kanan)
{
int tengah;
if (kanan > kiri)
{
tengah = (kanan + kiri) / 2;
m_sort(data, t, kiri, tengah);
m_sort(data, t, tengah+1, kanan);

merge(data, t, kiri, tengah+1, kanan);


}a++;

void merge(int data[], int t[], int kiri, int tengah, int kanan)
10

Praktikum Pemrograman Bahasa C

int i, kiri_2, d, p;
kiri_2 = tengah - 1;
p = kiri;
d = kanan - kiri + 1;
while ((kiri <= kiri_2) && (tengah <= kanan))
{
if (data[kiri] <= data[tengah])
{
t[p] = data[kiri];
p = p + 1;
kiri = kiri +1;
}
else
{
t[p] = data[tengah];
p = p + 1;
tengah = tengah + 1;
}
}
while (kiri <= kiri_2)
{
t[p] = data[kiri];
kiri = kiri + 1;
p = p + 1;
}
while (tengah <= kanan)
{
t[p] = data[tengah];
tengah = tengah + 1;
p = p + 1;
}

for (i=0; i <= d; i++)


{
data[kanan] = t[kanan];
kanan = kanan - 1;
}

11

Praktikum Pemrograman Bahasa C

12

Praktikum Pemrograman Bahasa C

13

Praktikum Pemrograman Bahasa C

2. Source code
//Descending
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define n 100000
int i,data[n];
int a,s;int b;
void pilihan();
void cetak();
void cetak2();
void tukar();
void straight();
void binary();
void selection();
void bubble();
void quicknon();
void quickrek();
void merge();
void mergeSort();
void m_sort();
void shell();

14

Praktikum Pemrograman Bahasa C

void main()
{
char lagi;
int pilsort;
do
{

}
}

a=0;
system("cls");
printf("\n\n ============== CARA SORTING ==============\n");
printf(" 1. Straight Insertion Sort\n");
printf(" 2. Binary Insertion Sort\n");
printf(" 3. Selection Sort\n");
printf(" 4. Bubble Sort\n");
printf(" 5. Shell Sort\n");
printf(" 6. Quick Sort non Rekursif\n");
printf(" 7. Quick Sort Rekursif\n");
printf(" 8. Merge Sort\n");
printf(" ==========================================\n");
printf("\n\n Masukkan banyaknya data : ");
scanf("%d",&s);
printf("\n %c Data awal Random :\n\n",1);
//
srand(time(NULL));
for(i=0;i<s;i++)
data[i]=rand()%1000;
//printf("\t");
cetak2();
puts("");
printf(" %c Pilihan pengurutan : ",1);
scanf("%d",&pilsort);
pilihan(pilsort);
printf("\n Lakukan sorting lagi?(y/t) ");
fflush(stdin);
scanf("%c",&lagi);
while((lagi=='Y')||(lagi=='y'));

void pilihan(int pildata)


{
if(pildata==1)
{
straight();
cetak();
}
else if(pildata==2)
{
binary();
cetak();
}
else if(pildata==3)
15

Praktikum Pemrograman Bahasa C

selection();
cetak();

}
else if(pildata==4)
{
bubble();
cetak();
}
else if(pildata==5)
{
shell(data,s);
cetak();
}
else if(pildata==6)
{
quicknon();
cetak();
}
else if(pildata==7)
{
quickrek(0,s-1);
cetak();
}
else if(pildata==8)
{
mergeSort(data);
cetak();
}

}
void cetak2()
{
for(i=0;i<s;i++)
printf("[%3d]\t",data[i]);
puts("");
}
void cetak()
{
printf("\n
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
218,196,196,196,196,196,194,196,196,196,196,196,196,196,196,196,196,196,196,196,196,19
6,196,196,196,196,196,196,196,196,196,196,191);
printf("\n %c No %c\t Data urut%8c",179,179,179);
printf("\n
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
195,196,196,196,196,196,197,196,196,196,196,196,196,196,196,196,196,196,196,196,196,19
6,196,196,196,196,196,196,196,196,196,196,180);
for(i=0;i<s;i++)
printf("\n %c%5d%c\t%6d \t%10c",179,i+1,179,data[i],179);
puts("");
16

Praktikum Pemrograman Bahasa C

printf("
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
192,196,196,196,196,196,193,196,196,196,196,196,196,196,196,196,196,196,196,196,196,19
6,196,196,196,196,196,196,196,196,196,196,217);
printf("\n Banyaknya penukaran data : %d",a);
}
void tukar(int *awal,int *akhir)
{
int sementara;
sementara = *awal;
*awal = *akhir;
*akhir = sementara;
}
void straight()
{
int j,x;
for (i=1;i<s;i++)
{
x=data[i];
j=i-1;
while(x<data[j])
{
a++;
data[j+1]=data[j];
j--;
}
data[j+1]=x;
}
}
void binary()
{
int j,l,r,m,x;
for(i=1;i<s;i++)
{
x=data[i];
l=0;
r=i-1;
while(l<=r)
{
m=(l+r)/2;
if(x>data[m])
r=m-1;
else
l=m+1;
17

Praktikum Pemrograman Bahasa C

}
for(j=i-1;j>=l;j--)
data[j+1]=data[j];
data[l]=x;
a++;

void selection()
{
int j, min;
for (i = 0; i < s; i++)
{
min = i;
for (j = i+1; j < s; j++)
{
if (data[j] > data[min])
{
min = j;
}
}
tukar(&data[i], &data[min]);
a++;
}
}
void bubble()
{
int i,j;
for(i=0;i<(s);i++)
{for(j=0;j<(s-(i+1));j++)
if(data[j] < data[j+1])
tukar(&data[j],&data[j+1]);
a++;}
}
void shell(int b[],int s)
{
int j,i,m,mid;
for(m = s/2;m>0;m/=2)
{
for(j = m;j< s;j++)
{
for(i=j-m;i>=0;i-=m)
{
if(b[i+m]<=b[i])
break;
else
{
mid = b[i];
b[i] = b[i+m];
18

Praktikum Pemrograman Bahasa C

b[i+m] = mid;
a++;

void quicknon()
{
struct tump
{
int kiri;
int kanan;
}tumpukan[15];
int j,l,r,x,ujung=1;
tumpukan[1].kiri=0;
tumpukan[1].kanan=s-1;
while(ujung!=0)
{
l=tumpukan[ujung].kiri;
r=tumpukan[ujung].kanan;
ujung--;
while(r>l)
{
i=l;
j=r;
x=data[(l+r)/2];
while(i<=j)
{
while(data[i]>x)
i++;
while(x>data[j])
j--;
if(i<=j)
{
int sementara;
sementara = data[i];
data[i] = data[j];
data[j] = sementara;
i++;
j--;
}
}
if(l<i)
{
ujung++;
tumpukan[ujung].kiri=i;
tumpukan[ujung].kanan=r;
19

Praktikum Pemrograman Bahasa C

}
r=j;
a++;

void quickrek(int l,int r)


{
int j,x;
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)
{
int sementara;
sementara = data[i];
data[i] = data[j];
data[j] = sementara;
a++;
i++;
j--;
}
}
if(l<j)
quickrek(l,j);
if(i<r)
quickrek(i,r);
}

void mergeSort(int data[], int t[])


{
m_sort(data, t, 0, s - 1);
}
void m_sort(int data[], int t[], int kiri, int kanan)
{
int tengah;
if (kanan > kiri)
{
20

Praktikum Pemrograman Bahasa C

tengah = (kanan + kiri) / 2;


m_sort(data, t, kiri, tengah);
m_sort(data, t, tengah+1, kanan);

merge(data, t, kiri, tengah+1, kanan);


}a++;

void merge(int data[], int t[], int kiri, int tengah, int kanan)
{
int i, kiri_2, d, p;
kiri_2 = tengah - 1;
p = kiri;
d = kanan - kiri + 1;
while ((kiri <= kiri_2) && (tengah <= kanan))
{
if (data[kiri] >= data[tengah])
{
t[p] = data[kiri];
p = p + 1;
kiri = kiri +1;
}
else
{
t[p] = data[tengah];
p = p + 1;
tengah = tengah + 1;
}
}
while (kiri <= kiri_2)
{
t[p] = data[kiri];
kiri = kiri + 1;
p = p + 1;
}
while (tengah <= kanan)
{
t[p] = data[tengah];
tengah = tengah + 1;
p = p + 1;
}

for (i=0; i <= d; i++)


{
data[kanan] = t[kanan];
kanan = kanan - 1;
}

21

Praktikum Pemrograman Bahasa C

22

Praktikum Pemrograman Bahasa C

23

Praktikum Pemrograman Bahasa C

3. Source code
//Ascending
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define n 1000000
int i,data[n];
int a,a1,a2,a3,a4,a5,s;int b;
int c,c1,c2,c3,c4,c5;
void pilihan();
void cetak();
void cetak2();
void tukar();
void straight();
void binary();
void selection();
void bubble();
void quicknon();
void shell();
void main()
24

Praktikum Pemrograman Bahasa C

char lagi;

do
{

a=a1=a2=a3=a4=a5=0;
c=c1=c2=c3=c4=c5=0;
system("cls");
printf("\n\n ============== CARA SORTING ==============\n");
printf(" 1. Straight Insertion Sort\n");
printf(" 2. Binary Insertion Sort\n");
printf(" 3. Selection Sort\n");
printf(" 4. Bubble Sort\n");
printf(" 5. Shell Sort\n");
printf(" 6. Quick Sort non Rekursif\n");
printf(" ==========================================\n");
printf("\n\n Masukkan banyaknya data : ");
scanf("%d",&s);
printf("\n %c Data awal Random :\n\n",1);
//
srand(time(NULL));
for(i=0;i<s;i++)
data[i]=rand()%1000;
//printf("\t");
cetak2();
puts("");
cetak();
straight();
printf("\n %cStraight Insertion Sort%c %8d%3c%6d\t%4c",179,179,c,179,a,179);
binary();
printf("\n %cBinary Insertion Sort%3c %8d%3c%6d\t%4c",179,179,c1,179,a1,179);
selection();
printf("\n %cSelection Sort%10c %8d%3c%6d\t%4c",179,179,c2,179,a2,179);
bubble();
printf("\n %cBubble Sort%13c %8d%3c%6d\t%4c",179,179,c3,179,a3,179);
shell(data,s);
printf("\n %cShell Sort%14c %8d%3c%6d\t%4c",179,179,c4,179,a4,179);
quicknon();
printf("\n %cQuick Sort%14c %8d%3c%6d\t%4c",179,179,c5,179,a5,179);
puts("");
printf("
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",192,196,196,196,196,196,196,196,196,196,196,196,196,1
96,196,196,196,196,196,196,196,196,196,196,193,196,196,196,196,196,196,196,196,196,196,196,19
3,196,196,196,196,196,196,196,196,196,196,196,196,196,217);
printf("\n Banyaknya penukaran data : %d",a+a1+a2+a3+a4+a5);
printf("\n Lakukan sorting lagi?(y/t) ");
fflush(stdin);
scanf("%c",&lagi);
}
while((lagi=='Y')||(lagi=='y'));
}

25

Praktikum Pemrograman Bahasa C

void cetak2()
{
for(i=0;i<s;i++)
printf("[%3d]\t",data[i]);
puts("");
}
void cetak()
{
printf("\n
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",218,196,196,196,196,196,196,196,196,196,196,196,196,1
96,196,196,196,196,196,196,196,196,196,196,194,196,196,196,196,196,196,196,196,196,196,196,19
4,196,196,196,196,196,196,196,196,196,196,196,196,196,191);
printf("\n %c\t Metode%9c Banding%3cJumlah Tukar%2c",179,179,179,179);
printf("\n
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c
%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",195,196,196,196,196,196,196,196,196,196,196,196,196,1
96,196,196,196,196,196,196,196,196,196,196,197,196,196,196,196,196,196,196,196,196,196,196,19
7,196,196,196,196,196,196,196,196,196,196,196,196,196,180);
}
void tukar(int *awal,int *akhir)
{
int sementara;
sementara = *awal;
*awal = *akhir;
*akhir = sementara;
}
void straight()
{
int j,x;
for (i=1;i<s;i++)
{
c++;

x=data[i];
j=i-1;
while(x<data[j])
{
a++;
data[j+1]=data[j];
j--;
}
data[j+1]=x;

void binary()
{
int j,l,r,m,x;
26

Praktikum Pemrograman Bahasa C

for(i=1;i<s;i++)
{
c1++;
x=data[i];
l=0;
r=i-1;
while(l<=r)
{
a1++;
m=(l+r)/2;
if(x<data[m])
r=m-1;
else
l=m+1;

}
for(j=i-1;j>=l;j--)
data[j+1]=data[j];
data[l]=x;
}

void selection()
{
int j, min;
for (i = 0; i < s; i++)
{
min = i;
for (j = i+1; j < s; j++)
{ c2++;
if (data[j] < data[min])
{
min = j;
}
}
tukar(&data[i], &data[min]);
a2++;
}
}
void bubble()
{
int i,j;
int x=0;
for(i=0;i<s;i++)
{ for(j=0;j<(s-(i+1));j++)
c3++;
{
27

Praktikum Pemrograman Bahasa C

}
}

if(data[j] > data[j+1])


{tukar(&data[j],&data[j+1]);
//a3++;
}
else
x++;
a3=c3-x;

void shell(int b[],int s)


{
int j,i,m,x=0;
for(m = s/2;m>0;m/=2)
for(j = m;j< s;j++)
{
for(i=j-m;i>=0;i-=m)
{
c4++;
if(b[i+m]<b[i])
{
int tengah;a4++;
tengah = b[i];
b[i] = b[i+m];
b[i+m] = tengah;
}
else
{x++;
}

break;}

}a4=c4+x;

}
void quicknon()
{
struct tump
{
int kiri;
int kanan;
}tumpukan[15];
int j,l,r,x,ujung=1;
tumpukan[1].kiri=0;
tumpukan[1].kanan=s-1;
28

Praktikum Pemrograman Bahasa C

while(ujung!=0)
{c5++;
l=tumpukan[ujung].kiri;
r=tumpukan[ujung].kanan;
ujung--;
while(r>l)
{
i=l;
j=r;
x=data[(l+r)/2];
while(i<=j)
{

}
if(l<i)
{

}
r=j;

while(data[i]<x)
i++;
while(x<data[j])
j--;
if(i<=j)
{
int sementara;a5++;
sementara = data[i];
data[i] = data[j];
data[j] = sementara;
i++;
j--;
}

ujung++;
tumpukan[ujung].kiri=i;
tumpukan[ujung].kanan=r;

29

Praktikum Pemrograman Bahasa C

30

Anda mungkin juga menyukai