Anda di halaman 1dari 16

MODUL ALGORITMA

(CCC-110)

MODUL 08
ALGORITMA PENGURUTAN LANJUTAN_2

DISUSUN OLEH
MALABAY,S.KOM,M.KOM

UNIVERSITAS ESA UNGGUL


2020

Universitas Esa Unggul


http://esaunggul.ac.id
0 / 16
ALGORITMA PENGURUTAN LANJUTAN_2

A. Kemampuan Akhir Yang Diharapkan


Setelah mempelajari modul ini, diharapkan mahasiswa mampu memahami
Algoritma Pengurutan Lanjutan_2

B. Uraian dan Contoh

Algoritma pengurutan adalah algoritma yang terdiri dari serangkaian


instruksi yang mengambil array sebagai input, melakukan operasi tertentu
pada array, terkadang disebut daftar, dan mengeluarkan array yang diurutkan.

Algoritma Pengurutan digunakan untuk mengatur ulang larik atau daftar


elemen tertentu sesuai dengan operator perbandingan pada elemen. Operator
perbandingan digunakan untuk memutuskan orde baru elemen dalam
struktur data masing-masing.

Jenis penyisipan adalah algoritma penyortiran sederhana yang cara


kerjanya mirip dengan cara menyortir kartu remi di tangan. Array secara
virtual terbagi menjadi bagian yang diurutkan dan tidak diurutkan. Nilai dari
bagian yang tidak diurutkan diambil dan ditempatkan pada posisi yang benar
di bagian yang diurutkan.

Algoritma Untuk mengurutkan larik berukuran n dalam urutan menaik:


1: Iterasi dari arr [1] ke arr [n] melalui array.
2: Bandingkan elemen saat ini (kunci) dengan pendahulunya.
3: Jika elemen kunci lebih kecil dari pendahulunya, bandingkan dengan
elemen sebelumnya. Pindahkan elemen yang lebih besar satu posisi ke atas
untuk memberi ruang bagi elemen yang ditukar.

Universitas Esa Unggul


http://esaunggul.ac.id
1 / 16
// C++ program for insertion sort
#include <bits/stdc++.h>
using namespace std;
/* Function to sort an array using insertion sort*/
void insertionSort(int arr[], int n)
{
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i - 1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];

Universitas Esa Unggul


http://esaunggul.ac.id
2 / 16
j = j - 1;
}
arr[j + 1] = key;
}
}
// A utility function to print an array of size n
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
}
/* Driver code */
int main()
{
int arr[] = { 12, 11, 13, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
printArray(arr, n);
return 0;
}
(Sumber Coding dari : rathbhupendra).

Bagaimana Cara Kerja Insertion Sort?


Mengambil array yang tidak disortir untuk:

Array yang Tidak Diurutkan


Sortir penyisipan membandingkan dua elemen pertama.
Sortir Penyisipan

Universitas Esa Unggul


http://esaunggul.ac.id
3 / 16
Ia menemukan bahwa 14 dan 33 sudah dalam urutan naik. Untuk saat ini, 14
ada di sub-daftar yang diurutkan.
Sortir Penyisipan
Urutan penyisipan bergerak maju dan membandingkan 33 dengan 27.
Sortir Penyisipan
Dan menemukan bahwa 33 tidak dalam posisi yang benar.
Sortir Penyisipan
Ini menukar 33 dengan 27. Ia juga memeriksa dengan semua elemen sub-
daftar yang diurutkan. Di sini kita melihat bahwa sub-daftar yang diurutkan
hanya memiliki satu elemen 14, dan 27 lebih besar dari 14. Oleh karena itu,
sub-daftar yang diurutkan tetap diurutkan setelah ditukar.
Sortir Penyisipan
Sekarang kami memiliki 14 dan 27 di sub-daftar yang diurutkan.
Selanjutnya, membandingkan 33 dengan 10.
Sortir Penyisipan
Nilai-nilai ini tidak dalam urutan yang diurutkan.
Sortir Penyisipan
Jadi kami menukar mereka.
Sortir Penyisipan
Namun, pertukaran membuat 27 dan 10 tidak disortir.
Sortir Penyisipan
Karenanya, menukar juga.
Sortir Penyisipan
Sekali lagi menemukan 14 dan 10 dalam urutan yang tidak diurutkan.
Sortir Penyisipan
Menukar mereka lagi. Pada akhir iterasi ketiga, memiliki sub-daftar yang
diurutkan dari 4 item.
Sortir Penyisipan
Proses ini berlangsung hingga semua nilai yang tidak diurutkan tercakup
dalam sub-daftar yang diurutkan. Sekarang akan melihat beberapa aspek
pemrograman dari semacam penyisipan.

Universitas Esa Unggul


http://esaunggul.ac.id
4 / 16
Algoritma
Sekarang memiliki gambaran yang lebih besar tentang bagaimana teknik
pengurutan ini bekerja, sehingga dapat memperoleh langkah-langkah
sederhana yang dengannya kita dapat mencapai pengurutan penyisipan.

Langkah 1 - Jika itu adalah elemen pertama, itu sudah diurutkan. kembali 1;
Langkah 2 - Pilih elemen berikutnya
Langkah 3 - Bandingkan dengan semua elemen di sub-daftar yang diurutkan
Langkah 4 - Geser semua elemen dalam sub-daftar yang diurutkan yang
lebih besar dari nilai yang akan diurutkan
Langkah 5 - Masukkan nilainya
Langkah 6 - Ulangi sampai daftar diurutkan

Pseudocode
procedure insertionSort( A : array of items )
int holePosition
int valueToInsert

for i = 1 to length(A) inclusive do:

/* select value to be inserted */


valueToInsert = A[i]
holePosition = i

/*locate hole position for the element to be inserted */

while holePosition > 0 and A[holePosition-1] > valueToInsert do:


A[holePosition] = A[holePosition-1]
holePosition = holePosition -1
end while

/* insert the number at hole position */


A[holePosition] = valueToInsert

end for

end procedure

Universitas Esa Unggul


http://esaunggul.ac.id
5 / 16
Implementation in C
#include <stdio.h>
#include <stdbool.h>

#define MAX 7

int intArray[MAX] = {4,6,3,2,1,9,7};

void printline(int count) {


int i;

for(i = 0;i < count-1;i++) {


printf("=");
}

printf("=\n");
}

void display() {
int i;
printf("[");

// navigate through all items


for(i = 0;i < MAX;i++) {
printf("%d ",intArray[i]);
}

printf("]\n");
}

void insertionSort() {

int valueToInsert;
int holePosition;
int i;

// loop through all numbers


for(i = 1; i < MAX; i++) {

// select a value to be inserted.


valueToInsert = intArray[i];

// select the hole position where number is to be inserted


holePosition = i;

// check if previous no. is larger than value to be inserted


while (holePosition > 0 && intArray[holePosition-1] > valueToInsert) {

Universitas Esa Unggul


http://esaunggul.ac.id
6 / 16
intArray[holePosition] = intArray[holePosition-1];
holePosition--;
printf(" item moved : %d\n" , intArray[holePosition]);
}
if(holePosition != i) {
printf(" item inserted : %d, at position : %d\n" , valueToInsert,holePosition);
// insert the number at hole position
intArray[holePosition] = valueToInsert;
}
printf("Iteration %d#:",i);
display();
}
}

void main() {
printf("Input Array: ");
display();
printline(50);
insertionSort();
printf("Output Array: ");
display();
printline(50);
}

If we compile and run the above program, it will produce the following result −

Output
Input Array: [4 6 3 2 1 9 7 ]
==================================================
Iteration 1#:[4 6 3 2 1 9 7 ]
item moved : 6
item moved : 4
item inserted : 3, at position : 0
Iteration 2#:[3 4 6 2 1 9 7 ]

Universitas Esa Unggul


http://esaunggul.ac.id
7 / 16
item moved : 6
item moved : 4
item moved : 3
item inserted : 2, at position : 0
Iteration 3#:[2 3 4 6 1 9 7 ]
item moved : 6
item moved : 4
item moved : 3
item moved : 2
item inserted : 1, at position : 0
Iteration 4#:[1 2 3 4 6 9 7 ]
Iteration 5#:[1 2 3 4 6 9 7 ]
item moved : 9
item inserted : 7, at position : 5
Iteration 6#:[1 2 3 4 6 7 9 ]
Output Array: [1 2 3 4 6 7 9 ]

Jenis Penyisipan berfungsi sebagai berikut:


Langkah pertama melibatkan perbandingan elemen yang dimaksud dengan
elemen yang berdekatan.
Dan jika pada setiap perbandingan terungkap bahwa elemen yang dimaksud dapat
disisipkan pada posisi tertentu, maka dibuatkan ruang untuknya dengan
menggeser elemen lainnya satu posisi ke kanan dan menyisipkan elemen pada
posisi yang sesuai.
Prosedur di atas diulangi sampai semua elemen dalam array berada pada posisi
yang tepat.
Memahami bekerja dengan contoh berikut:
Pertimbangkan larik berikut: 25, 17, 31, 13, 2

Iterasi Pertama: Bandingkan 25 dengan 17. Perbandingan menunjukkan 17 <25.


Maka tukarlah 17 dan 25.

Array sekarang terlihat seperti:

Universitas Esa Unggul


http://esaunggul.ac.id
8 / 16
17, 25, 31, 13, 2

Iterasi Kedua: Mulailah dengan elemen kedua (25), tetapi itu sudah ditukar
ke posisi yang benar, jadi kami melanjutkan ke elemen berikutnya.
Sekarang pegang elemen ketiga (31) dan bandingkan dengan yang
sebelumnya.
Sejak 31> 25, tidak ada pertukaran yang terjadi.
Juga, 31> 17, tidak ada pertukaran yang terjadi dan 31 tetap pada posisinya.
Array setelah iterasi Kedua terlihat seperti:
17, 25, 31, 13, 2

Iterasi Ketiga: Mulai Iterasi berikut dengan elemen keempat (13), dan
bandingkan dengan elemen sebelumnya.
Sejak 13 <31, kami menukar keduanya.
Array sekarang menjadi: 17, 25, 13, 31, 2.

Tapi masih ada elemen yang belum kita bandingkan dengan 13. Sekarang
perbandingannya antara 25 dan 13. Karena, 13 <25, kita tukar keduanya.

Universitas Esa Unggul


http://esaunggul.ac.id
9 / 16
Array menjadi 17, 13, 25, 31, 2.
Perbandingan terakhir untuk iterasi sekarang antara 17 dan 13. Karena 13
<17, menukar keduanya.
Array sekarang menjadi 13, 17, 25, 31, 2.

Iterasi Keempat: Iterasi terakhir membutuhkan perbandingan elemen


terakhir (2), dengan semua elemen sebelumnya dan melakukan pertukaran
yang sesuai antar elemen.
Karena, 2 <31. Tukar 2 dan 31.
Array sekarang menjadi: 13, 17, 25, 2, 31.

Universitas Esa Unggul


http://esaunggul.ac.id
10 / 16
Bandingkan 2 dengan 25, 17, 13.
Karena, 2 <25. Tukar 25 dan 2.
13, 17, 2, 25, 31.
Bandingkan 2 dengan 17 dan 13.
Sejak, 2 <17. Tukar 2 dan 17.
Array sekarang menjadi:
13, 2, 17, 25, 31.
Perbndingan terakhir untuk Iterasi adalah membandingkan 2 dengan 13.
Sejak 2 <13. Tukar 2 dan 13.
Array sekarang menjadi:
2, 13, 17, 25, 31.
Ini adalah larik terakhir setelah semua iterasi dan pertukaran elemen yang
sesuai.

Universitas Esa Unggul


http://esaunggul.ac.id
11 / 16
Pseudocode
INSERTION-SORT(A)
for i = 1 to n
key ← A [i]
j ← i – 1
while j > = 0 and A[j] > key
A[j+1] ← A[j]
j ← j – 1
End while
A[j+1] ← key
End for

Universitas Esa Unggul


http://esaunggul.ac.id
12 / 16
Implementation:C++
#include <stdlib.h>
#include <iostream>

using namespace std;

//member functions declaration


void insertionSort(int arr[], int length);
void printArray(int array[], int size);

// main function
int main()
{
int array[6] = {5, 1, 6, 2, 4, 3};
// calling insertion sort function to sort the array
insertionSort(array, 6);
return 0;
}

void insertionSort(int arr[], int length)


{
int i, j, key;
for (i = 1; i < length; i++)
{
key = arr[i];
j = i-1;

while (j >= 0 && arr[j] >key)


{
arr[j+1] = arr[j];
j--;
}
arr[j +1] = key;

}
cout << "Sorted Array: ";
// print the sorted array
printArray(arr, length);
}

// function to print the given array


void printArray(int array[], int size)
{
int j;
for (j = 0; j < size; j++)
{
cout <<" "<< array[j];
}
cout << endl;
}

Universitas Esa Unggul


http://esaunggul.ac.id
13 / 16
C. Latihan

1. Algoritma yang terdiri dari serangkaian instruksi yang mengambil array


sebagai input, melakukan operasi tertentu pada array disebut:
2. Algoritma Pengurutan digunakan untuk mengatur ..................larik atau
daftar elemen tertentu sesuai dengan operator perbandingan pada
elemen. Operator perbandingan digunakan untuk memutuskan orde
baru elemen dalam struktur data masing-masing

D. Kunci Jawaban
1. Algoritma pengurutan.
2. Ulang

E. Daftar Pustaka
1.Algorithms, 4th Edition;Author(s) Robert Sedgewick and Kevin Wayne,
Publisher: Addison-Wesley Professional; 2011
2.Introduction to Algorithms 3rd Ed, hal 1002-1012. London. The MIT.
Press,2009.
3. https://www.geeksforgeeks.org/sorting-algorithms/
4.https://www.tutorialspoint.com/data_structures_algorithms/insertion_sort_progr
am_in_c.htm
5.https://www.tutorialspoint.com/data_structures_algorithms/insertion_sort_algori
thm.htm
6. https://www.interviewbit.com/tutorial/insertion-sort-algorithm/#working

Universitas Esa Unggul


http://esaunggul.ac.id
14 / 16
Universitas Esa Unggul
http://esaunggul.ac.id
15 / 16

Anda mungkin juga menyukai