Anda di halaman 1dari 10

Sorting Pada Struktur Data

TUGAS KE III

DISUSUN OLEH :

1. Muhammad Wahyu Pratama ( 171402032 )


2. Mhd. Syafriansyah ( 171402068 )
3. Alwi Arfizein Lubis ( 171402101 )
4. Firda Mega Tasya ( 171402113 )
5. Arnesa Julia Damanik (171402125 )

FAKULTAS ILMU KOMPUTER DAN TEKNOLOGI INFORMASI


PROGRAM STUDI TEKNOLOGI INFORMASI
UNIVERSITAS SUMATERA UTARA
2018
Macam-macam Sorting
Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut
terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan.
Aplikasi tersebut mampu menampilkan daftar account yang aktif.
Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan
secaraascending demi kenyamanan dalam penelusuran data.
Beberapa macam algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan
sering digunakan. Oleh karena itu, pemahaman atas algoritma – algoritma yang ada sangatlah
berguna.

1. Selection Sort

Pengurutan dilakukan dengan memilih elemen terbesar dan menempatkan pada posisinya,
kemudian mencari element terbesar berikutnya dan menempatkan pada tempatnya, dan
seterusnya.

Proses pengurutan dengan menggunakan metode selection sort secara terurut naik adalah :
1. Mencari data terkecil dari data pertama sampai data terakhir, kemunian di tukar posisinya
dengan data pertama.
2. mencari data terkecil dari data kedua sampai data terakhir, kemudian di tukar dengan
posisinya dengan data kedua.
3. mencari data terkecil dari data ketiga sampai data terakhir, kemudian di tukar posisinya
dengan data ketiga
4. dan seterusnya sampai semua data turut naik. apabila terdapat n buah data yang akan di
urutkan, maka membutukan (n - 1) langkah pengurutan, dimana data terakhir yaitu data ke-n
tidak perlu di urutkan karena hanya tinggal satu satunya.

Berikut adalah implementasi selection sort dalam C++:

#include <iostream>
#include <conio.h>
using namespace std;

main()
{
int nilai[20];
int n,i,j,x,pos,tampung;
cout<<"Masukan banyak inputan : "<<endl;
cin>>n;
cout<<"======================="<<endl;
for (int i=0; i<n; i++)
{
cout<<"Nilai ke "<<(i+1)<<" : ";
cin>>nilai[i];
}
cout<<endl;
cout<<"Sebelum Sorting"<<endl;
cout<<"====================="<<endl;
for (int i=0; i<n; i++)
{
cout<<nilai[i]<<endl;
}
cout<<endl;

for (int i=0;i<n-1;++i)


{
pos=i;
for (int j=i+1;j<n;++j)
{
if (nilai[j]<nilai[pos])
{
pos=j;
}
}
if (pos !=i)
{
tampung=nilai[pos];
nilai[pos]=nilai[i];
nilai[i]=tampung;
}
cout<<"langkah ke "<<i+1<<endl;
cout<<"-----------------------"<<endl;
for (int x=0;x<n;++x)
{
cout<<nilai[x]<<endl;

}
cout<<endl;
}

cout<<"Setelah sorting : \n";


cout<<"======================="<<endl;
for (int i=0;i<n;++i)
{
cout<<nilai[i]<<endl;
}

getch();
}

2. Metode Penyisipan Langsung (Straight Insertion Sort) / Insertion sort

Data dicek satu per satu mulai dari yang kedua sampai dengan yang terakhir. Apabila
ditemukan data yang lebih kecil daripada data sebelumnya, maka data tersebut disisipkan
pada posisi yang sesuai. Akan lebih mudah apabila membayangkan pengurutan kartu.
Pertama-tama anda meletakkan kartu-kartu tersebut di atas meja, kemudian melihatnya
dari kiri ke kanan. Apabila kartu di sebelah kanan lebih kecil daripada kartu di sebelahkiri,
maka ambil kartu tersebut dan sisipkan di tempat yang sesuai.
Berikut adalah implementasi insertion sort dalam C++:

#include<iostream>
#include<conio.h>
using namespace std;

main()
{
int x,a[100],i,t,j,k;

cout<<"Insertion Sort - Desc\n";


cout<<"Masukkan banyak bilangan = ";cin>>x;
for(i=1;i<=x;i++)
{
cout<<"\n Bilangan ke-"<<i<<" : ";cin>>a[i];
}
cout<<"\n\n data Sebelum diurutkan :";
for(i=1;i<=x;i++)
{
cout<<" "<<a[i];
}
cout<<endl;
for(i=1;i<=x;i++)
{
for(j=1;j<=i;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
cout<<"\n # "<<i<<" : ";
for(k=1;k<=i;k++)
{
cout<<" "<<a[k];
}
}
cout<<"\n\n data Setelah diurutkan secara descending : ";
for(i=1;i<=x;i++)
{
cout<<" "<<a[i];
}
getch();
}

3. Metode Penggabungan (Merge Sort)

Metode penggabungan biasanya digunakan pada pengurutan berkas. Prinsip dari


metode penggabungan sebagai berikut : mula-mula diberikan dua kumpulan data yang
sudah dalam keadaan urut. Kedua kumpulan data tersebut harus dijadikan satu table
sehingga dalam keadaan urut.
Berikut adalam implementasi merge sort dalam C++:

#include <iostream>
using namespace std;

// A function to merge the two half into a sorted data.


void Merge(int *a, int low, int high, int mid)
{
// We have low to mid and mid+1 to high already sorted.
int i, j, k, temp[high-low+1];
i = low;
k = 0;
j = mid + 1;

// Merge the two parts into temp[].


while (i <= mid && j <= high)
{
if (a[i] < a[j])
{
temp[k] = a[i];
k++;
i++;
}
else
{
temp[k] = a[j];
k++;
j++;
}
}

// Insert all the remaining values from i to mid into


temp[].
while (i <= mid)
{
temp[k] = a[i];
k++;
i++;
}

// Insert all the remaining values from j to high into


temp[].
while (j <= high)
{
temp[k] = a[j];
k++;
j++;
}

// Assign sorted data stored in temp[] to a[].


for (i = low; i <= high; i++)
{
a[i] = temp[i-low];
}
}

// A function to split array into two parts.


void MergeSort(int *a, int low, int high)
{
int mid;
if (low < high)
{
mid=(low+high)/2;
// Split the data into two half.
MergeSort(a, low, mid);
MergeSort(a, mid+1, high);

// Merge them to get sorted output.


Merge(a, low, high, mid);
}
}

int main()
{
int n, i;
cout<<"\nEnter the number of data element to be sorted:
";
cin>>n;

int arr[n];
for(i = 0; i < n; i++)
{
cout<<"Enter element "<<i+1<<": ";
cin>>arr[i];
}

MergeSort(arr, 0, n-1);

// Printing the sorted data.


cout<<"\nSorted Data ";
for (i = 0; i < n; i++)
cout<<"->"<<arr[i];

return 0;
}

4. Quick Sort

Algoritma sortir yang efisien yang ditulis oleh C.A.R. Hoare pada 1962. Dasar strateginya
adalah “memecah dan menguasai”. Quicksort dimulai dengan menscan daftar yang disortir
untuk nilai median. Nilai ini, yang disebut tumpuan (pivot), kemudian dipindahkan ke satu sisi
pada daftar dan butir-butir yang nilainya lebih besar dari tumpuan di pindahkan ke sisi lain.
Berikut adalah implementasi quick sort dalam C++:
#include <iostream>
#include <conio.h>
#define max 20
using namespace std ;

void quick_sort(int darr[max], int lb, int ub)


{
int a;
int atas,bawah;
int temp;

if (lb>=ub)
return;
a=darr[lb];
//1. Tentukan Lower Bound (Batas Bawah) & Upper Bound
(Batas Atas)

atas=ub;
bawah=lb;

while (bawah < atas) //2. Bandingkan Lower Bound (LB)


dengan Upper Bound (UB)
{
while (darr[bawah] <= a) //
bawah++;
while (darr[atas]>a) //3. Jika LB>UB, Tukar (cari
operasi perbandingan yang optimal/terkecil)
atas--;
if(bawah<atas)
{
temp=darr[bawah];
darr[bawah]=darr[atas];
darr[atas]=temp;
}
//4. Jika LB =< UB, maka Next Upper Bound & Lower Bound
}
darr[lb]=darr[atas];
darr[atas]=a;
quick_sort(darr,lb,atas-1);
quick_sort(darr,atas+1,ub);
}
int main()
{
int arr[max];
int i,n,lb,ub;
lb=0;
cout<<"\tQUICK SORT\n\n";
cout<<"Masukkan jumlah index : ";
cin>>n;

ub=n;
cout<<"Masukkan data: \n\n";
for(i=1;i<=n;i++)
{
cout<<"data ke -> "<<i<<" : "; cin>>arr[i];
}
quick_sort(arr,lb,ub);
cout<<"\nHasil pengurutan data: ";
for(i=0; i<n;i++)
cout<<" "<<arr[i];

getch();
}

Anda mungkin juga menyukai