Fungsi input() dalam Pemrograman Python
Fungsi input() dalam Pemrograman Python
Algoritma dan
Pemrograman
a. Algoritma:
Algoritma adalah serangkaian langkah-langkah sistematis dan terorganisir yang
digunakan untuk menyelesaikan suatu masalah atau mencapai suatu tujuan dalam waktu
yang terbatas. Algoritma tidak harus terkait dengan komputer; itu bisa sepadan dengan
resep memasak atau instruksi untuk merakit furnitur. Namun, dalam konteks ilmu
komputer, algoritma biasanya dinyatakan dalam bentuk yang dapat dijalankan oleh mesin
dan digunakan sebagai dasar untuk menulis program komputer.
Sejarah pemrograman komputer adalah cerita yang kaya dan beragam, mulai dari
konsep-konsep awal tentang komputasi hingga teknologi canggih yang kita miliki saat ini.
Mari kita jelajahi sejarah dan perkembangan pemrograman dalam garis besar:
1. Awal Mula:
1800-an: Adaide Charles Babbage, Analytical Engine, dikenal sebagai salah satu
mesin komputasi pertama yang dirancang. Meskipun mesin ini tidak pernah sepenuhnya
dibangun selama hidup Babbage, asisten Babbage, Ada Lovelace, dikenal sebagai
programmer pertama karena catatan-catatannya yang mendetail mengenai cara mesin
tersebut dapat diprogram untuk menghitung serangkaian angka bernardo.
2. Era Kartu Punch:
Awal 1900-an: Komputer awal, seperti IBM 701, menggunakan kartu punch untuk
menerima instruksi. Ini adalah era sebelum bahasa pemrograman, di mana instruksi
diberikan langsung dalam bentuk kode mesin atau Assembly yang sangat rendah
tingkatnya.
3. Lahirnya Bahasa Pemrograman Tingkat Tinggi:
1950-an: Fortran (Formula Translation) diciptakan untuk kebutuhan komputasi ilmiah.
Ini adalah salah satu bahasa pemrograman tingkat tinggi pertama.
1959: COBOL (Common Business Oriented Language) diciptakan, yang ditujukan
untuk aplikasi bisnis.
4. Dekade 1960-an dan 1970-an:
LISP diciptakan untuk kebutuhan pemrograman simbolik dan penelitian kecerdasan
buatan.
ALGOL menjadi inspirasi bagi banyak bahasa pemrograman yang datang setelahnya,
termasuk C, Java, dan Pascal.
C diperkenalkan di akhir 1960-an dan awal 1970-an dan menjadi salah satu bahasa
paling populer dan berpengaruh.
Pascal diperkenalkan sebagai alat pembelajaran dan juga untuk penelitian dalam
desain bahasa pemrograman.
5. Dekade 1980-an:
C++ diperkenalkan, menambahkan fitur-fitur pemrograman berorientasi objek ke C.
Perl diciptakan, menjadi populer untuk pemrograman skrip.
Algoritma:
Program:
Contoh:
Misalkan kita memiliki masalah mencari bilangan terbesar dalam daftar bilangan.
Algoritma:
Sebuah program komputer, pada dasarnya, adalah serangkaian instruksi yang diberikan
kepada komputer untuk dieksekusi. Meskipun struktur dasar bisa bervariasi antar bahasa
pemrograman, banyak elemen yang umum ditemukan di banyak bahasa.
Dalam konteks pemrograman, fungsi utama seringkali merupakan titik awal eksekusi
suatu program. Ini adalah fungsi yang pertama kali dipanggil ketika program dijalankan.
Berikut adalah beberapa penjelasan tentang fungsi utama berdasarkan beberapa bahasa
pemrograman :
1. C dan C++:
Dalam C dan C++, main() adalah fungsi utama. Ketika program dijalankan, main()
adalah fungsi pertama yang dieksekusi.
[Link]:
Meskipun Python tidak memiliki konsep "fungsi utama" yang ketat seperti C atau
Java, konstruksi berikut sering digunakan untuk menunjukkan bagian kode yang harus
dieksekusi saat script dijalankan sebagai program standalone (bukan diimpor sebagai
modul) :
D. Kontrol Aliran
Kontrol aliran dalam pemrograman merujuk pada urutan di mana instruksi atau
pernyataan dieksekusi atau dievaluasi. Kontrol aliran adalah konsep dasar yang
memungkinkan pemrogram membuat keputusan, mengulangi blok kode, dan
menjalankan kode berdasarkan kondisi tertentu. Berikut adalah beberapa elemen dasar
kontrol aliran:
2023 Algoritma dan Pemrograman Pengembangan Materi Pembelajaran dan e-learning
9
Arief Zikry,[Link].,[Link] [Link]
1. Pernyataan Kondisional
Pernyataan kondisional memungkinkan pemrogram membuat keputusan dan
mengeksekusi blok kode berdasarkan apakah suatu kondisi benar atau salah.
1. Variabel
Variabel dalam pemrograman berfungsi sebagai wadah atau tempat penyimpanan untuk
data. Sebuah variabel memiliki nama (sering disebut sebagai "identifier") yang digunakan
untuk mengacu pada data yang disimpannya. Saat program dijalankan, data yang
disimpan dalam variabel dapat diubah atau dimanipulasi sesuai kebutuhan.
Karakteristik Variabel:
1. Nama (Identifier): Setiap variabel memiliki nama yang unik yang disebut identifier. Ini
memungkinkan pemrogram untuk mengakses atau mengubah nilai yang disimpan di
memori.
2023 Algoritma dan Pemrograman Pengembangan Materi Pembelajaran dan e-learning
11
Arief Zikry,[Link].,[Link] [Link]
2. Nilai: Ini adalah data aktual yang disimpan di memori dan diasosiasikan dengan nama
variabel.
3. Tipe Data: Menentukan jenis data yang bisa disimpan dalam variabel.
4. Alamat Memori: Lokasi fisik di mana variabel disimpan di memori.
5. Cakupan (Scope): Menentukan area kode di mana variabel dapat diakses.
6. Riwayat Hidup (Lifespan): Durasi waktu di mana variabel ada di memori saat program
dijalankan.
2. Tipe Data
Tipe data menentukan jenis data yang dapat disimpan dalam suatu variabel. Ini juga
menentukan operasi apa yang dapat dilakukan terhadap data tersebut dan berapa
banyak memori yang akan ditempati oleh variabel tersebut.
Tipe Data Dasar (Primitif):
1. Integer: Digunakan untuk menyimpan bilangan bulat (tanpa titik desimal). Contoh: -3,
0, 42.
2. Floating Point (Float/Double): Digunakan untuk menyimpan bilangan dengan titik
desimal. Float biasanya memakan memori lebih sedikit dibandingkan dengan Double,
tetapi Double memiliki presisi lebih tinggi. Contoh: -3.14, 0.001, 20.6.
3. Character (Char): Digunakan untuk menyimpan karakter tunggal, seperti 'A', '1', atau
'?'.
4. Boolean (Bool): Digunakan untuk menyimpan nilai kebenaran, yaitu True atau False.
Dalam setiap bahasa pemrograman, cara mendeklarasikan variabel dan tipe data
yang didukung mungkin berbeda. Namun, konsep dasar yang dijelaskan di atas tetap
relevan di hampir semua bahasa pemrograman.
Input dan output adalah dua komponen fundamental dalam pemrograman yang
memungkinkan program berkomunikasi dengan pengguna atau sistem lain. Input adalah cara kita
memberi data kepada program, sedangkan output adalah cara program menyajikan informasi
kembali kepada kita atau sistem lain.
1. Input
Input adalah proses menerima data dari sumber eksternal. Dalam konteks aplikasi yang
berinteraksi dengan pengguna, ini biasanya berarti menerima data dari keyboard atau
mouse. Dalam ustak yang lebih kompleks, input bisa berasal dari file, basis data, sensor, atau
sumber lainnya, Berikut contoh input dalam Bahasa pemrograman :
a. Python:
Dalam Python, fungsi input() digunakan untuk menerima input dari pengguna.
b. Dalam Java, Anda dapat menggunakan kelas Scanner dari ustaka standar untuk
menerima input dari pengguna.
2. Output
Output adalah proses menampilkan data ke tujuan eksternal. Ini bisa berarti
menampilkan informasi di layar, menulis ke file, mengirim data ke alat, dan lainnya, Berikut
contoh input dalam Bahasa pemrograman :
a. Python:
Dalam Python, fungsi print() digunakan untuk menampilkan output ke layar.
b. Java :
Dalam Java, Anda dapat menggunakan [Link]() untuk menampilkan output
ke layar.
c. C++:
Dalam C++, Anda dapat menggunakan cout untuk menampilkan output ke layar.
Pengendali aliran program mengacu pada mekanisme yang mengatur urutan eksekusi
instruksi dalam sebuah program. Ada tiga jenis struktur pengendali aliran dasar: sekuensial,
pemilihan (kondisional), dan perulangan. Struktur-struktur ini memungkinkan programmer untuk
menciptakan alur eksekusi yang kompleks berdasarkan kondisi dan perulangan tertentu.
1. if, else:
if: Menjalankan blok kode jika kondisinya bernilai benar.
else: Menjalankan blok kode jika kondisi if bernilai salah.
elif/else if: Menambahkan kondisi lain setelah if dan sebelum else.
Mekanisme ini memungkinkan program untuk membuat keputusan dan
menjalankan instruksi berbeda berdasarkan kebenaran atau ketidakbenaran kondisi
tertentu, Penerapan didalam Bahasa pemrograman :
a. Pyton :
b. Java :
c. C++ :
2023 Algoritma dan Pemrograman Pengembangan Materi Pembelajaran dan e-learning
16
Arief Zikry,[Link].,[Link] [Link]
2. switch-case:
a. Pyton :
Python tidak memiliki struktur switch-case bawaan. Namun, Anda dapat menirunya
dengan menggunakan kamus (dictionary):
b. Java
Perulangan memungkinkan eksekusi blok kode berulang kali berdasarkan kondisi atau
jumlah iterasi tertentu.
1. for:
Perulangan for digunakan ketika kita tahu sebelumnya berapa kali iterasi yang ingin
kita lakukan. Biasanya, kita menggunakan perulangan for untuk mengulangi kode
berdasarkan jumlah tertentu, berikut penerapan didalam Bahasa pemrograman :
2. while:
Perulangan while terus menjalankan blok kode selama kondisi yang diberikan bernilai
benar. Jika kondisi sudah salah sejak awal, blok kode mungkin tidak pernah dijalankan.
3. do-while:
Mirip dengan perulangan while, namun perbedaannya adalah blok kode di dalamnya
akan dijalankan setidaknya sekali sebelum kondisinya diperiksa, karena pengecekan
kondisi dilakukan setelah eksekusi blok kode.
Kesimpulan:
Pengendali aliran program memungkinkan kita untuk menciptakan logika yang kompleks dan
responsif. Kondisional (seperti if-else dan switch-case) memungkinkan program untuk merespons
situasi yang berbeda, sementara perulangan (seperti for, while, dan do-while) memungkinkan
program untuk menjalankan tugas berulang kali tanpa harus menulis ulang kode yang sama
berulang kali. Memahami dan menguasai struktur-struktur ini adalah kunci untuk membangun
program yang efisien dan efektif.
Fungsi adalah blok kode terorganisir dan dapat digunakan kembali yang digunakan untuk
melakukan tugas atau aksi tertentu. Fungsi memberikan modularitas untuk kode Anda dan
memungkinkan untuk melakukan pemakaian ulang kode. Dalam pemrograman, kita sering kali
menemui tugas-tugas yang perlu diulang. Daripada menulis kode yang sama berulang kali, kita
dapat menggunakan fungsi.
Contoh :
Di sini, sapa adalah fungsi yang menerima satu parameter nama dan ketika dipanggil, ia akan
mencetak pesan sapaan.
Dalam contoh di atas, angka1 dan angka2 adalah parameter, sedangkan 5 dan 3 adalah argumen.
Return value adalah nilai yang dikembalikan oleh fungsi ke pemanggilnya ketika selesai
menjalankan. Setelah pernyataan return dieksekusi, fungsi berhenti dan kontrol kembali ke
pemanggil. Tidak semua fungsi harus memiliki nilai kembali. Namun, jika perlu, fungsi dapat
mengembalikan satu atau lebih nilai.
Contoh :
Dalam contoh di atas, fungsi kuadrat mengembalikan nilai kuadrat dari argumen yang diberikan
dan nilai tersebut dapat disimpan dalam variabel atau digunakan langsung oleh pemanggil.
Ringkasan:
Fungsi adalah blok kode yang dapat digunakan kembali untuk tugas tertentu.
Parameter adalah variabel dalam deklarasi fungsi, sedangkan argumen adalah nilai yang
diberikan ke fungsi saat dipanggil.
Return value adalah nilai yang dikembalikan oleh fungsi ke pemanggilnya.
Rekursi adalah teknik di mana suatu fungsi memanggil dirinya sendiri. Proses ini terus
berlanjut sampai kondisi tertentu terpenuhi dan fungsi berhenti memanggil dirinya sendiri. Setiap
pemanggilan rekursif mengurangi masalah ke ukuran yang lebih kecil, dan akhirnya masalah
tersebut dapat diselesaikan tanpa lebih lanjut memanggil fungsi secara rekursif.
Basis (base case): Ini adalah kondisi yang, ketika terpenuhi, akan menghentikan
pemanggilan rekursif lebih lanjut.
Langkah rekursif (recursive step): Di mana fungsi memanggil dirinya sendiri dengan
argumen yang berbeda.
a. Faktotial
b. Deret Fibonacci
a. Rekursi:
Ringkasan:
Rekursi adalah teknik di mana suatu fungsi memanggil dirinya sendiri, biasanya digunakan untuk
memecahkan masalah yang dapat dibagi menjadi sub-masalah yang lebih kecil. Iterasi adalah
proses pengulangan menggunakan loop. Meskipun rekursi mungkin lebih intuitif untuk beberapa
jenis masalah, ia dapat memerlukan penggunaan memori yang lebih besar dibandingkan dengan
iterasi. Pilihan antara keduanya tergantung pada masalah khusus yang dihadapi dan preferensi
pribadi pemrogram.
1. Array:
a. Definisi: Sebuah array adalah kumpulan elemen yang memiliki tipe data yang sama
dan berurutan. Ukuran dari array biasanya tetap, yang berarti setelah suatu array
didefinisikan, kita tidak dapat mengubah ukurannya.
b. Perbedaan dengan List:
Elemen dalam array harus memiliki tipe data yang sama.
Ukuran array biasanya tetap.
2. List:
a. Definisi: List adalah kumpulan elemen yang berurutan, tetapi tidak terbatas pada tipe
data yang sama. Dalam banyak bahasa pemrograman, seperti Python, list memiliki
fleksibilitas untuk berubah ukurannya (dinamis).
b. Perbedaan dengan Array:
Elemen dalam list dapat memiliki tipe data yang berbeda.
Ukuran list dapat berubah-ubah (dinamis).
1. Array:
Cara Kerja: Karena array memiliki ukuran yang tetap dan tipe data yang sama
untuk setiap elemennya, mereka biasanya diwakili dalam memori secara berurutan. Hal
ini memungkinkan akses yang cepat ke elemen berdasarkan indeksnya.
Penerapan:
2. List:
Cara Kerja: List dalam banyak bahasa pemrograman diwakili sebagai struktur data
yang dinamis, yang memungkinkannya tumbuh atau menyusut sesuai kebutuhan.
Implementasi mungkin melibatkan array dinamis, node berantai, atau metode lain.
Penerapan:
Python adalah salah satu bahasa yang menggunakan list sebagai salah satu tipe data
utamanya.
Ringkasan :
Array dan list adalah struktur data yang berurutan. Sementara array memiliki ukuran yang
tetap dan elemen dengan tipe data yang sama, list lebih fleksibel dalam hal ukuran dan tipe
Di banyak bahasa pemrograman, termasuk Python dan Java, string didefinisikan sebagai
sebuah kumpulan dari karakter-karakter yang tersusun secara berurutan. Dalam banyak hal,
string dapat dilihat dan diperlakukan seperti array karakter.
Contoh :
1. Panjang String
Mengembalikan jumlah karakter dalam string
3. Pengecekan Substring
1. Penggantian Substring :
3. Pembalikan String :
4. Penghilangan Whitespace :
Menghilangkan whitespace (spasi, tab, baris baru) dari awal dan akhir string.
5. Format String :
Menyisipkan nilai tertentu ke dalam string.
Dengan memahami fungsi-fungsi dasar dan manipulasi string ini, Anda dapat
melakukan banyak operasi yang kompleks pada teks. Pemahaman dasar ini juga penting
saat Anda berinteraksi dengan input dan output dalam pemrograman, serta saat bekerja
dengan data teks dalam banyak aplikasi.
1. Stack (Tumpukan):
Stack adalah struktur data linier yang mengikuti prinsip Last In First Out (LIFO). Artinya,
elemen terakhir yang ditambahkan ke stack akan menjadi elemen pertama yang diambil
keluar.
2. Queue (Antrian):
Queue adalah struktur data linier yang mengikuti prinsip First In First Out (FIFO). Artinya,
elemen pertama yang ditambahkan ke queue akan menjadi elemen pertama yang diambil
keluar.
1. Stack:
a. Operasi Dasar:
Push: Menambahkan elemen ke puncak stack.
Pop: Mengambil dan menghapus elemen dari puncak stack.
Peek/Top: Melihat elemen puncak tanpa menghapusnya.
IsEmpty: Memeriksa apakah stack kosong.
b. Implemantasi Pyton :
2. Queue
2023 Algoritma dan Pemrograman Pengembangan Materi Pembelajaran dan e-learning
29
Arief Zikry,[Link].,[Link] [Link]
a. Operasi Dasar:
Enqueue: Menambahkan elemen ke akhir queue.
Dequeue: Mengambil dan menghapus elemen dari awal queue.
Front: Melihat elemen depan tanpa menghapusnya.
IsEmpty: Memeriksa apakah queue kosong.
b. Implementasi Python:
1. Stack:
Penyelesaian Ekspresi Matematika: Stack dapat digunakan untuk mengevaluasi
ekspresi postfix atau prefix.
Undo Mechanism: Fungsi "undo" dalam banyak aplikasi perangkat lunak
menggunakan konsep stack.
Navigasi Browser: Tombol "back" pada browser menggunakan konsep stack untuk
kembali ke halaman sebelumnya.
2. Queue:
Sistem Antrian: Seperti antrian tiket bioskop, pemesanan makanan di restoran cepat
saji.
Penjadwalan Tugas: Dalam komputasi, penjadwalan tugas sering menggunakan
queue.
Dengan memahami konsep dasar stack dan queue, serta bagaimana mengimplementasikannya,
Anda dapat menyelesaikan berbagai macam masalah pemrograman dan desain sistem dengan
lebih efisien.
Linked List adalah struktur data linier yang terdiri dari sekumpulan node (simpul) yang
digunakan untuk merepresentasikan urutan. Berbeda dengan array, di mana setiap elemen
memiliki indeks dan ditempatkan berdampingan di memori, elemen-elemen di linked list
disimpan dalam node. Setiap node memiliki dua bagian: data dan referensi (pointer) ke node
berikutnya dalam urutan.
Dengan memahami konsep linked list dan operasi dasarnya, programmer dapat mengatur data
dengan lebih fleksibel dan dinamis dibandingkan dengan struktur data linier lainnya seperti array.
Trees adalah struktur data hierarkis yang digunakan untuk merepresentasikan hubungan
antara objek-objek. Trees terdiri dari nodes (simpul) yang terhubung oleh edges (garis). Tidak
seperti array atau linked list, trees dapat memiliki lebih dari dua cabang.
Binary Trees adalah jenis tree dimana setiap node memiliki paling banyak dua anak (biasanya
disebut sebagai "left child" dan "right child").
Metode Traversal:
In-order (LNR):
1. Kunjungi left child.
2. Kunjungi node saat ini.
3. Kunjungi right child.
Pre-order (NLR):
1. Kunjungi node saat ini.
2. Kunjungi left child.
3. Kunjungi right child.
Post-order (LRN):
1. Kunjungi left child.
2. Kunjungi right child.
3. Kunjungi node saat ini.
Level-order (Breadth-First Search):
Semua node di left child memiliki nilai yang kurang dari node saat ini.
Semua node di right child memiliki nilai yang lebih besar dari node saat ini.
Kelebihan BST:
Operasi seperti pencarian, penyisipan, dan penghapusan dapat dilakukan dengan cepat,
terutama jika tree seimbang.
Kekurangan BST:
Jika tidak seimbang (contoh: saat data dimasukkan dalam urutan terurut), operasi dapat
menjadi lambat, mendekati O(n).
Graf adalah koleksi dari titik-titik yang disebut simpul (vertices) dan garis yang
menghubungkan simpul-simpul tersebut disebut sisi (edges). Graf digunakan untuk
merepresentasikan banyak jenis informasi dan struktur dalam dunia nyata, seperti jaringan
komputer, peta, jaringan sosial, dan lain-lain.
Directed Graph (Digraph): Sisi memiliki arah, yaitu dari satu simpul ke simpul lainnya.
1. Adjacency Matrix:
Matriks 2D (dua dimensi) digunakan untuk merepresentasikan graf.
Ukuran matriks adalah V x V dimana V adalah jumlah simpul di graf.
Nilai m[i][j] adalah 1 jika ada sisi dari simpul i ke simpul j; sebaliknya 0.
Kelebihan:
Representasi sederhana.
Memeriksa keberadaan sisi antara dua simpul cepat.
Kekurangan:
Kelebihan:
Sorting atau pengurutan adalah proses mengatur sejumlah data (angka, huruf, dll) dalam
urutan tertentu (naik atau turun). Tujuan dari sorting adalah untuk meningkatkan efisiensi
pencarian atau untuk mengoptimalkan struktur data yang digunakan.
Kriteria Pengurutan:
Stability: Sebuah algoritma sorting dikatakan stabil jika urutan relatif dari dua objek yang
sama tetap tidak berubah setelah pengurutan.
In-place: Jika algoritma memerlukan sejumlah konstan memori ekstra untuk mengurutkan
list, maka dikatakan in-place.
Adaptive: Algoritma dikatakan adaptive jika efisiensinya meningkat dengan sebagian data
yang sudah diurutkan.
1. Bubble Sort:
Prinsip: Bandingkan setiap pasangan item berdekatan dan tukar jika dalam urutan
yang salah.
Terus lakukan ini sampai tidak ada lagi pertukaran yang diperlukan.
2. Selection Sort:
Prinsip: Cari item terkecil di list, tukar dengan item pertama. Kemudian cari item
terkecil kedua, tukar dengan item kedua, dan seterusnya.
3. Insertion Sort:
Prinsip: Bangun list terurut satu item pada satu waktu. Untuk setiap posisi, iterasi
melalui list yang sudah diurutkan di sebelah kiri untuk menemukan posisi item
tersebut.
[Link]
Searching atau pencarian adalah proses menemukan lokasi dari suatu item dalam
kumpulan data. Searching adalah salah satu operasi dasar yang sering dilakukan dalam
pemrograman dan memiliki berbagai algoritma, masing-masing dengan kelebihan dan
kekurangannya.
Mengerti teknik searching dasar seperti linear search dan binary search memberikan
pemahaman dasar tentang bagaimana menemukan informasi dalam kumpulan data. Meskipun
ada banyak algoritma pencarian lanjutan lainnya, pemahaman atas konsep dasar ini penting
sebelum beralih ke metode yang lebih kompleks.
Algoritma greedy (serakah) adalah algoritma yang mencari solusi optimal pada setiap
tahapan dengan harapan menemukan solusi global optimal. Pada setiap langkah, algoritma
greedy membuat keputusan yang terlihat optimal saat itu tanpa mempertimbangkan keputusan
sebelumnya atau keputusan yang mungkin diambil nantinya.
Masalah Koin (Coin Change Problem): Diberikan denominasi koin dengan nilai yang berbeda,
tentukan jumlah minimum koin yang diperlukan untuk membuat total tertentu.
Divide and Conquer (membagi dan menaklukkan) adalah paradigma pemrograman yang
mengpecahkan masalah dengan membagi masalah menjadi sub-masalah yang lebih kecil dan
lebih mudah dikelola, menyelesaikan setiap sub-masalah secara independen, dan
menggabungkan solusi dari sub-masalah untuk mendapatkan solusi dari masalah asli.
1. Merge Sort:
Divide: Bagi array menjadi dua bagian yang hampir sama.
Conquer: Urutkan kedua bagian secara rekursif menggunakan Merge Sort.
Combine: Gabungkan kedua bagian yang telah diurutkan untuk mendapatkan array
final yang diurutkan.
2. Quick Sort:
Divide: Pilih elemen, disebut pivot, dari array. Bagilah array menjadi dua sub-array:
elemen yang kurang dari pivot dan elemen yang lebih besar dari pivot.
Conquer: Urutkan kedua sub-array secara rekursif menggunakan Quick Sort.
Combine: Ini sebenarnya otomatis terjadi karena array sudah terbagi dengan benar.