NRP : 17043019
Jurusan : Teknik Informatika
Matkul : Struktur Data
PENGERTIAN SORT
Sorting atau pengurutan data adalah proses yang sering harus dilakukan dalam pengolahan
data. Sort dalam hal ini diartikan mengurutkan data yang berada dalam suatu tempat
penyimpanan, dengan urutan tertentu baik urut menaik (ascending) dari nilai terkecil sampai
dengan nilai terbesar, atau urut menurun (descending) dari nilai terbesar sampai dengan nilai
terkecil.
1.Bubble Sort
2.Selection Sort
3.Insertion Sort
4.Shell Sort
5.Merge Sort
6.Radix Sort
7.Quck Sort
8.Heap Sort
BUBBLE SORT
Bubble sort adalah proses pengurutan sederhana yang bekerja dengan cara berulang kali
membandingkan dua elemen data pada suatu saat dan menukar elemen data yang urutannya
salah. Ide dari Bubble sort adalah gelembung air yang akan “mengapung” untuk table yang
terurut menaik (ascending). Elemen bernilai kecil akan “diapungkan” (ke indeks terkecil),
artinya diangkat ke “atas” (indeks terkecil) melalui pertukaran.
3.
4. void v_Bubble(int A[],int N);
5. void main()
6. { int L[5];
7. int i,N;
10. for(i=0;i<N;i++)
14. v_Bubble(L,N);
15.
18. for(i=0;i<N;i++)
19. { printf(“%3i”,L[i]); };
20. getche();
22.
26. for(a=0;a<=(N-2);a++)
27. { for(b=(N-1);b>=(a+1);b–)
SELECTION SORT
Seperti pada algoritma Bubble Sort, proses memilih nilai maksimum /minimum dilakukan
pada setiap pass. Jika array berukuran N, maka jumlah pass adalah N-1.
Contoh Program lengkap penerapan algoritma Maximum Selection Sort Ascending dalam
bahasa C
main()
{ int L[5];
int i,N;
for(i=0;i<N;i++)
{ printf(“Data ke-%i: “,i+1);
v_SelAsc(L,N);
printf(“\nData Terurut:\n”);
for(i=0;i<N;i++)
getche();
{ int maks,k,j,temp;
for(k=(N-1);k>=0;k–)
{ maks=0;
for(j=0;j<=k;j++)
{ maks=j; } //endif
} //end loop j
v_Tukar(&A[k],&A[maks]);
} //end loop k
{ int temp;
temp = *P;
*P = *M;
*M = temp;
Contoh program lengkap penerapan algoritma Minimum Selection Sort Ascending dalam
bahasa C
1. #include <stdio.h>
2. #include <conio.h>
5. main()
6. { int L[5];
7. int i,j,k,min,temp,N;
11. for(i=0;i<N;i++)
15. v_minAsc(L,N);
18. for(i=0;i<N;i++)
19. { printf(” %5i”,L[i]); } //end loop i
21. getche();
23.
27. for(k=0;k<=(N-2);k++)
28. { min = k;
29. for(j=(k+1);j<=(N-1);j++)
34.
38. *P = *M;
39. *M = temp;
INSERTION SORT
Insertion sort adalah sebuah algoritma pengurutan yang membandingkan dua elemen data
pertama, mengurutkannya, kemudian mengecek elemen data berikutnya satu persatu dan
membandingkannya dengan elemen data yang telah diurutkan. Karena algoritma ini bekerja
dengan membandingkan elemen-elemen data yang akan diurutkan, algoritma ini termasuk
pula dalam comparison-based sort.
Contoh program lengkap penerapan algoritma Insertion Sort Ascending dalam bahasa C
#include <stdio.h>
#include <conio.h>
main()
{ int L[7];
int i,N;
for(i=0;i<N;i++)
v_insAsc(L,N);
printf(“Data terurut:\n”);
for(i=0;i<N;i++)
printf(“\nTekan Enter…\n”);
getche();
{ int k,X,i;
while(k<=N-1)
{ i=k;
X=A[i];
{ A[i]=A[i-1];
i–; } //endwhile
A[i]=X;
k++; } //endwhile
} //end procedure
void ShellSort(int N)
{
int Jarak, i, j;
bool Sudah;
Jarak = N;
while(Lompat > 1)
{
Jarak = Jarak / 2;
Sudah = false;
while(!Sudah)
{
Sudah = true;
for(j=0; j<N-Jarak; j++)
{
i = j + Jarak;
if(Data[j] > Data[i])
{
Tukar(&Data[j], &Data[i]);
Sudah = false;
}}}}}
MERGE SORT
Merge Sort adalah algoritma yang berdasarkan strategi divide-and-conquer. Algoritma
ini tediri dari dua bagian utama, yaitu bagian pembagian list menjadi sublist-sublist yang
lebih kecil dan bagian sort (pengurutan) dan merge (penggabungan) pada sublist-sublist
tersebut.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
printf(“%s”, in);
int i = 0;
printf(“%d “, v[i]);
printf(“\n”);
int i = p;
int j = q + 1;
int k = 0;
else
tmp[k++] = v[j++];
while (i <= q)
tmp[k++] = v[i++];
while (j <= r)
tmp[k++] = v[j++];
free(tmp);
if (p < r) {
int q = (p + r) / 2;
mergeS(v, p, q);
mergeS(v, q + 1, r);
merge(v, p, q, r);
int n = 10;
printv(“V: “, v, n);
mergeS(v, 0, n – 1);
printv(“V: “, v, n);
return 0;
RADIX SORT
Radix Sort adalah metode sorting tanpa pembandingan dengan kata lain, sorting Non-
Comparasion sort dimana dalam prosesnya tidak melakukan perbandingan antar data. Secara
umum yang proses yang dilakukan dalam metode ini adalah mengklasifikasikan data sesuai
dengan kategori terurut yang tertentu dan dalam tiap kategorinya dilakukan pengklasifikasian
lagi dan seterusnya sesuai dengan kebutuhan. Dan kemudian subkategori-subkategori tersebut
digabungkan kembali, yang secara dilakukan hanya dengan metode sederhana concatenation.
#include
#include
main()
scanf(“%d”,&leng);
for (a=0;a
printf(“data %d = “,a+1);
scanf(“%d”,&d);
printf(“\nData %d= %d “,a+1,data[a]); } index=0; for (a=0;a<=9;a++) //lsb sort for (b=0;b {
if (data[b]<100) { m=data[b]%10; } else { m=data[b]%100; m=m%10; } if (m==a) {
temp[index]=data[b]; index++; } } for (a=0;a<=9;a++) { data[a]=temp[a]; } index=0; for
(a=0;a<=9;a++) //csb sort for (b=0;b { if (data[b]<100) { m=data[b]/10; } else {
m=data[b]%100; m=m/10; } if (m==a) { temp[index]=data[b]; index++; } } for
(a=0;a<=9;a++) { data[a]=temp[a]; } index=0; for (a=0;a<=9;a++) //msb sort for (b=0;b {
m=data[b]/100; if (m==a) { temp[index]=data[b]; index++; } } for (a=0;a<=9;a++) {
data[a]=temp[a]; } printf(“\n\nSetelah di Sorting\n”); for (a=0;a<(leng);a++) {
printf(“%d”,data[a]); printf(“\n”); } }
#include <iostream.h>
#include <conio.h>
int i;
for (i=0;i<n;i++)
cout<<data[i]<<” “;
cout<<“\n”;
int x,i,j,tmp;
x=data[p];
i=p;
j=r;
while(1)
{
while(data[j]>x)
j=j-1;
while(data[i]<x)
i=i+1;
if (i<j)
//tukarkan data
tmp=data[i];
data[i]=data[j];
data[j]=tmp;
else
return j;
int q;
if(p<r)
q=partisi(data,p,r);
quick_sort(data,p,q);
quick_sort(data, q+1,r);
}
}
int main()
const jum_data=9;
int i;
int data[]={25,57,48,37,12,92,80,33,1};
cout<<data[ctr]<<” “;
quick_sort(data,0,jum_data-1);
//hasil pengurutan
cout<<endl;
cout<<endl;
cout<<“hasil pengurutan:\n”;
tampilkan_larik(data,jum_data);
getch();
HEAP SORT
Metode heap sort adalah metode dari pengembangan tree. Heap sort memiliki kecepatan
O(NlogN). Heap sort melakukan suatu pengurutan menggunakan suatu struktur data yang di
sebut heap. Heap memiliki kompleksitas yang besar dalam pembuatan kodenya, tetapi heap
sort mampu mengurutkan data-data yang sangat banyak dengan waktu yang cepat.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
//—————————————————————————
int val;
}*TR;
//—————————————————————————
TR new_node()
TR new;
new=malloc(sizeof(struct heap));
new->left=new->right=NULL;
return(new);
//—————————————————————————
TR get_node()
TR new;
new=new_node();
scanf(“%d”,&new->val);
return(new);
//—————————————————————————
void insert_node(TR temp,TR new)
if(temp->val>new->val)
if(temp->left!=NULL)
insert_node(temp->left,new);
else
temp->left=new;
else
if(temp->right!=NULL)
insert_node(temp->right,new);
else
temp->right=new;
//—————————————————————————
if(temp!=NULL)
heap_sort(temp->left);
printf(“%d\t”,temp->val);
heap_sort(temp->right);
//—————————————————————————
TR create()
{
TR head,new,temp;
char c;
head=new_node();
new=get_node();
head->left=new;
c=getche();
while(c==’y’||c==’Y’)
new=get_node();
insert_node(head->left,new);
c=getche();
return(head);
//—————————————————————————
void main()
TR head;
int choice;
textcolor(10);
while(1)
{
clrscr();
scanf(“%d”,&choice);
switch(choice)
case 1:head=create();
break;
printf(“\n\n\t “);
heap_sort(head->left);
break;
if(getch()==27)
exit(0);
break;
getch();
//