SORTING ARRAY
SESI 2
2
Pengertian Sorting
Proses mengurutkan data yang berada dalam suatu
tempat penyimpanan, dengan urutan tertentu yaitu
urutan naik (ascending) dari nilai terkecil hingga
terbesar atau urutan turun (descending) dari nilai
terbesar hingga nilai terkecil.
Dilihat dari tempat penyimpanan data, sort dibedakan
antara external sort bila datanya ada dalam media
external atau external storage seperti harddisk dan
internal sort bila datanya ada dalam internal storage
atau memory computer.
3
Tujuan Sorting
• Mendapatkan kemudahan dalam pencarian
anggota dari suatu himpunan, disamping
dapat mempercepat mengetahui data
terbesar dan data terkecil
4
Metode sorting
• Bubble sort
• Selection sort
• Insertion sort
• Shell sort
• Merge sort
• Radix sort
• Quick sort
• Heap short
• Proses yang terjadi
pada pengurutan
adalah
– Perbandingan data
– Pertukaran data
Metode Sorting
5
Bubble Sort
Bubble artinya gelembung dan gelembung selalu
mengapung.
Prinsip proses pengurutan dengan menggunakan
metode bubble sort adalah
menempatkan (mengapungkan) nilai terbesar (jika urut
ascending) atau nilai terkecil (jika urut descending) pada
elemen ujung paling kanan pada tahap per tahapnya.
6
Bubble Sort
Sudah ada array satu dimensi sudah ada isinya,
diilustrasikan sebagai berikut :
Akan diurutkan ascending sehingga dihasilkan
urutan data seperti berikut:
7
Bubble Sort
Maka proses pengurutan tahap demi tahap dengan menggunakan
metode bubble sort adalah sebagai berikut :
8
Bubble Sort
Dari array diatas yang terdiri dari 6 elemen
dibutuhkan proses sebanyak 5 tahap maka untuk N
elemen dibutuhkan (N-1) tahap proses pengurutan.
Selanjutnya proses tahap per tahap akan diuraikan
lebih rinci lagi.
Pada proses setiap tahap algoritma yang digunakan
adalah proses banding (compare) dan tukar (swap).
Bukan semata-mata meletakkan nilai terbesar ke
ujung kanan, melainkan membandingkan nilai-
nilai yang ada pada masing-masing elemen.
9
F
l
o
w
c
h
a
r
t
10
Rumus Bubble Sort
for (K = 0 ; K < N-1 ; K++)
{
for (i = 0 ; i < N-2-K ; i++)
{
if ( A[i] > A[i+1] )
{
x = A[i];
A[i] = A[i+1];
A[i+1] = x;
}
}
}
11
Selection Sort
Metode selection sort ini menggunakan proses
pencarian (searching) kemudian tukar nilai yang dicari
dengan nilai pada elemen awal.
Misalnya untuk pengurutan ascending, dicari nilai
terkecil pertama kemudian tukar dengan elemen ke-0,
selanjutnya dicari nilai terkecil kedua dan tukar
dengan elemen ke-1 dan seterusnya.
12
F
l
o
w
c
h
a
r
t
13
Rumus Selection Sort
for ( i=0 ; i <= N-2 ; i++)
{
kecil = i;
for ( k = i+1 ; k <= N-1 ; k++ )
{
if (A[k] > A[j])
{
kecil = k;
}
}
temp = A[i];
A[i] = A[kecil];
A[kecil] = temp;
}
14
Insertion Sort
• Metode ini dilakukan dengan penyisipan
nilai data untuk suatu array misal A, yang
tidak terurut ke dalam suatu tempat kosong
misal C dan memastikan nilai data C selalu
dalam keadaan terurut.
15
Insertion Sort
Tahap 1 :
Dimulai dari A[1]
Simpan nilai A[1] pada sebuah variabel (misal x)
Geser masing-masing satu langkah ke kanan semua nilai yang berada pada kiri
A[1] satu per satu jika nilai tersebut lebih besar dari x
Insert (sisipkan) x di bekas tempat nilai yang terakhir digeser.
Tahap 2 :
Simpan nilai A[2] pada variabel x.
Geser masing-masing satu langkah ke kanan semua nilai yang berada pada kiri
A[2] satu per satu jika nilai tersebut lebih besar dari x
Insert (sisipkan) x di bekas tempat nilai yang terakhir digeser.
Tahap berikutnya dan seterusnya hingga terakhir tahap ke N-1 (untuk array
dengan N elemen).
Instruksi pergeseran ke kanan adalah A[i]=A[i - 1], sehingga nilai A[i] akan
hilang (ditimpa oleh nilai A[i-1] oleh karena itu pada awal tahap A[i] disimpan
pada sebuah variabel.
16
F
l
o
w
c
h
a
r
t
17
Rumus Insertion Sort
For (i=2; i<=N; i++)
{
temp = data[i];
j = i-1;
while(temp < data[j] && j>1)
{
data[j+1] = data[j];
j = j-1;
}
if(temp >= data[j]
data[j+1] = temp;
else
{
data[j+1] = data[j];
data[j] = temp;
}
}
18
Quick Sort
• Metode pembagian dan penguasaan
• Array misal A yang tidak terurut dibagi menjadi 2
sub bagian yakni array kiri dan array kanan.
• Proses pengurutan kedua sub bagian array
menggunakan rekursif dan kemudian
menggabungkan kembali 2 sub bagian array yang
terurut untuk menghasilkan keseluruhan array
yang terurut
19
R
u
m
u
s
Q
u
i
c
k
S
o
r
t
void quick(int a[], int left, int right)
{
int i,j, x, temp;
i = left;
j = right;
x = a[(left+right)/2];
do
{
while(a[i]<x && i<right)
++i;
while(a[j]>x && j>left)
--j;
if(i<=j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
++i;
--j;
}
}while(i <= j);
if(left<j)
quick(a, left,j);
if(i<right)
quick(a, i, right);
}
20
Merge Sort
• Pengurutan data yang jumlahnya besar,
dimana tidak semuanya dapat dimuat dalam
memori utama, sehingga harus disimpan
dalam penyimpanan sekunder berupa berkas
21
R
u
m
u
s
M
e
r
g
e
S
o
r
t
void MergeSort(int x[], int n)
{
long aux[8], i, j, k, L1, L2, size, U1, U2; size = 1;
while(size < n){
L1 = 0; k = 0;
while(L1+size < n){
L2 = L1 + size;
U1 = L2 -1;
U2 = (L2+size-1 < n) ? L2+size-1 : n-1;
for(i=L1, j=L2; i<=U1 && j<=U2; k++)
if(x[i] <= x[j]) aux[k] = x[i++];
else aux[k] = x[j++];
for(;i <= U1; k++)
aux[k] = x[i++];
for(;j <= U2; k++)
aux[k] = x[j++];
L1 = U2 + 1;}
for(i=L1;k<n;i++) aux[k++] = x[i];
for(i=0;i<n;i++) x[i] = aux[i];
size *=2;}
}
22
Heap Sort
• Heap merupakan pohon biner tanpa pointer
dan mirip seperti pohon biner yang hampir
penuh. Semua simpul (daun) terletak pada
dua cabang terbawah dan simpul daun pada
cabang paling bawah terletak di sebelah kiri
sejauh mungkin
• Nilai dalam setiap simpul adalah lebih besar
atau sama dengan anaknya
23
Rumus Heap Sort
void HeapSort(int a[], int size)
{
int i, f, s;
for(i=1;i<size;i++)
{
int e = a[i];
s = i;
f = (s-1)/2;
while(s > 0 && a[f] > e)
{
a[s] = a[f];
s = f;
f = (s-1)/2;
}
a[s] = e;
}
for(i=size; i>0; i--)
{
int value = a[i];
a[i] = a[0];
f = 0;
if(i==1)
s = -1;
else
s = 1;
if(i > 2 && a[2] > a[1])
s = 2;
while(s >= 0 && value < a[s])
{
a[f] = a[s];
f = s;
s = 2*f+1;
if(s+1 <= i-1 && a[s] < a[s+1])
s = s+1;
if(s > i-1)
s = -1;
}
a[f] = value;
}
}
24
Shell Sort
jarak = N/2;
while(jarak > 0)
{
for(i=0; i<=N-jarak; i++)
{
j=i+jarak;
if(data[i] >data[j])
{
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
jarak = jarak/2;
}
Metode pengurutan dengan cara penukaran sepasang
elemen dengan jarak tertentu
25
Tugas Praktikum
Buatlah program untuk menyimpan dan
mengurutkan data-data struct mahasiswa yang
terdiri dari 3 field yaitu NIM, NamaMhs, Nilai.
Kemudian isikan secara acak/tidak berurut) contoh
data dari 5 mahasiswa yang masing-masing
mengandung NIM, NamaMhs, Nilai.
Selanjutnya gunakan algoritma pengurutan untuk
mengurutkan data mahasiswa berdasarkan
NamaMhs kemudian tampilkan hasil
pengurutannya

Bab 2 sorting array

  • 1.
  • 2.
    2 Pengertian Sorting Proses mengurutkandata yang berada dalam suatu tempat penyimpanan, dengan urutan tertentu yaitu urutan naik (ascending) dari nilai terkecil hingga terbesar atau urutan turun (descending) dari nilai terbesar hingga nilai terkecil. Dilihat dari tempat penyimpanan data, sort dibedakan antara external sort bila datanya ada dalam media external atau external storage seperti harddisk dan internal sort bila datanya ada dalam internal storage atau memory computer.
  • 3.
    3 Tujuan Sorting • Mendapatkankemudahan dalam pencarian anggota dari suatu himpunan, disamping dapat mempercepat mengetahui data terbesar dan data terkecil
  • 4.
    4 Metode sorting • Bubblesort • Selection sort • Insertion sort • Shell sort • Merge sort • Radix sort • Quick sort • Heap short • Proses yang terjadi pada pengurutan adalah – Perbandingan data – Pertukaran data Metode Sorting
  • 5.
    5 Bubble Sort Bubble artinyagelembung dan gelembung selalu mengapung. Prinsip proses pengurutan dengan menggunakan metode bubble sort adalah menempatkan (mengapungkan) nilai terbesar (jika urut ascending) atau nilai terkecil (jika urut descending) pada elemen ujung paling kanan pada tahap per tahapnya.
  • 6.
    6 Bubble Sort Sudah adaarray satu dimensi sudah ada isinya, diilustrasikan sebagai berikut : Akan diurutkan ascending sehingga dihasilkan urutan data seperti berikut:
  • 7.
    7 Bubble Sort Maka prosespengurutan tahap demi tahap dengan menggunakan metode bubble sort adalah sebagai berikut :
  • 8.
    8 Bubble Sort Dari arraydiatas yang terdiri dari 6 elemen dibutuhkan proses sebanyak 5 tahap maka untuk N elemen dibutuhkan (N-1) tahap proses pengurutan. Selanjutnya proses tahap per tahap akan diuraikan lebih rinci lagi. Pada proses setiap tahap algoritma yang digunakan adalah proses banding (compare) dan tukar (swap). Bukan semata-mata meletakkan nilai terbesar ke ujung kanan, melainkan membandingkan nilai- nilai yang ada pada masing-masing elemen.
  • 9.
  • 10.
    10 Rumus Bubble Sort for(K = 0 ; K < N-1 ; K++) { for (i = 0 ; i < N-2-K ; i++) { if ( A[i] > A[i+1] ) { x = A[i]; A[i] = A[i+1]; A[i+1] = x; } } }
  • 11.
    11 Selection Sort Metode selectionsort ini menggunakan proses pencarian (searching) kemudian tukar nilai yang dicari dengan nilai pada elemen awal. Misalnya untuk pengurutan ascending, dicari nilai terkecil pertama kemudian tukar dengan elemen ke-0, selanjutnya dicari nilai terkecil kedua dan tukar dengan elemen ke-1 dan seterusnya.
  • 12.
  • 13.
    13 Rumus Selection Sort for( i=0 ; i <= N-2 ; i++) { kecil = i; for ( k = i+1 ; k <= N-1 ; k++ ) { if (A[k] > A[j]) { kecil = k; } } temp = A[i]; A[i] = A[kecil]; A[kecil] = temp; }
  • 14.
    14 Insertion Sort • Metodeini dilakukan dengan penyisipan nilai data untuk suatu array misal A, yang tidak terurut ke dalam suatu tempat kosong misal C dan memastikan nilai data C selalu dalam keadaan terurut.
  • 15.
    15 Insertion Sort Tahap 1: Dimulai dari A[1] Simpan nilai A[1] pada sebuah variabel (misal x) Geser masing-masing satu langkah ke kanan semua nilai yang berada pada kiri A[1] satu per satu jika nilai tersebut lebih besar dari x Insert (sisipkan) x di bekas tempat nilai yang terakhir digeser. Tahap 2 : Simpan nilai A[2] pada variabel x. Geser masing-masing satu langkah ke kanan semua nilai yang berada pada kiri A[2] satu per satu jika nilai tersebut lebih besar dari x Insert (sisipkan) x di bekas tempat nilai yang terakhir digeser. Tahap berikutnya dan seterusnya hingga terakhir tahap ke N-1 (untuk array dengan N elemen). Instruksi pergeseran ke kanan adalah A[i]=A[i - 1], sehingga nilai A[i] akan hilang (ditimpa oleh nilai A[i-1] oleh karena itu pada awal tahap A[i] disimpan pada sebuah variabel.
  • 16.
  • 17.
    17 Rumus Insertion Sort For(i=2; i<=N; i++) { temp = data[i]; j = i-1; while(temp < data[j] && j>1) { data[j+1] = data[j]; j = j-1; } if(temp >= data[j] data[j+1] = temp; else { data[j+1] = data[j]; data[j] = temp; } }
  • 18.
    18 Quick Sort • Metodepembagian dan penguasaan • Array misal A yang tidak terurut dibagi menjadi 2 sub bagian yakni array kiri dan array kanan. • Proses pengurutan kedua sub bagian array menggunakan rekursif dan kemudian menggabungkan kembali 2 sub bagian array yang terurut untuk menghasilkan keseluruhan array yang terurut
  • 19.
    19 R u m u s Q u i c k S o r t void quick(int a[],int left, int right) { int i,j, x, temp; i = left; j = right; x = a[(left+right)/2]; do { while(a[i]<x && i<right) ++i; while(a[j]>x && j>left) --j; if(i<=j) { temp = a[i]; a[i] = a[j]; a[j] = temp; ++i; --j; } }while(i <= j); if(left<j) quick(a, left,j); if(i<right) quick(a, i, right); }
  • 20.
    20 Merge Sort • Pengurutandata yang jumlahnya besar, dimana tidak semuanya dapat dimuat dalam memori utama, sehingga harus disimpan dalam penyimpanan sekunder berupa berkas
  • 21.
    21 R u m u s M e r g e S o r t void MergeSort(int x[],int n) { long aux[8], i, j, k, L1, L2, size, U1, U2; size = 1; while(size < n){ L1 = 0; k = 0; while(L1+size < n){ L2 = L1 + size; U1 = L2 -1; U2 = (L2+size-1 < n) ? L2+size-1 : n-1; for(i=L1, j=L2; i<=U1 && j<=U2; k++) if(x[i] <= x[j]) aux[k] = x[i++]; else aux[k] = x[j++]; for(;i <= U1; k++) aux[k] = x[i++]; for(;j <= U2; k++) aux[k] = x[j++]; L1 = U2 + 1;} for(i=L1;k<n;i++) aux[k++] = x[i]; for(i=0;i<n;i++) x[i] = aux[i]; size *=2;} }
  • 22.
    22 Heap Sort • Heapmerupakan pohon biner tanpa pointer dan mirip seperti pohon biner yang hampir penuh. Semua simpul (daun) terletak pada dua cabang terbawah dan simpul daun pada cabang paling bawah terletak di sebelah kiri sejauh mungkin • Nilai dalam setiap simpul adalah lebih besar atau sama dengan anaknya
  • 23.
    23 Rumus Heap Sort voidHeapSort(int a[], int size) { int i, f, s; for(i=1;i<size;i++) { int e = a[i]; s = i; f = (s-1)/2; while(s > 0 && a[f] > e) { a[s] = a[f]; s = f; f = (s-1)/2; } a[s] = e; } for(i=size; i>0; i--) { int value = a[i]; a[i] = a[0]; f = 0; if(i==1) s = -1; else s = 1; if(i > 2 && a[2] > a[1]) s = 2; while(s >= 0 && value < a[s]) { a[f] = a[s]; f = s; s = 2*f+1; if(s+1 <= i-1 && a[s] < a[s+1]) s = s+1; if(s > i-1) s = -1; } a[f] = value; } }
  • 24.
    24 Shell Sort jarak =N/2; while(jarak > 0) { for(i=0; i<=N-jarak; i++) { j=i+jarak; if(data[i] >data[j]) { temp = data[i]; data[i] = data[j]; data[j] = temp; } } jarak = jarak/2; } Metode pengurutan dengan cara penukaran sepasang elemen dengan jarak tertentu
  • 25.
    25 Tugas Praktikum Buatlah programuntuk menyimpan dan mengurutkan data-data struct mahasiswa yang terdiri dari 3 field yaitu NIM, NamaMhs, Nilai. Kemudian isikan secara acak/tidak berurut) contoh data dari 5 mahasiswa yang masing-masing mengandung NIM, NamaMhs, Nilai. Selanjutnya gunakan algoritma pengurutan untuk mengurutkan data mahasiswa berdasarkan NamaMhs kemudian tampilkan hasil pengurutannya