Untuk masalah dengan instansiasi yang kecil, kita dapat menemukan solusinya dengan mudah dan cepat. Bagaimana kalau instansiasi masalah berukuran besar ? Misalnya pada masalah pengurutan, jika n=1000 jelas tidak mudah mengurutkan data sebanyak itu. Oleh karena itu, kita perlu menuliskan prosedur yang berisis langkah-langkah pengurutan sehingga prosedur tersebut dapat 'dijalankan' oleh sebuah pemroses (komputer, manusia, robot, dan sebagainya) untuk menghasilkan solusi setiap instansiasi masalah pengurutan. Kita katakan langkah-langkah pengurutan itu untuk memecahkan masalah. Prosedur yang berisi langkah-langkah penyelesaian masalah disebut
algoritma.
Algoritma adalah urutan langkah-langkah untuk memecahkan suatu masalah.
terdapat definisi lain dari algoritma - tetapi pada perinsipnya sama dengan definisi yang diungkapkan di atas -- yang saya kutip dari berbagai literatur, antara lain :
Algoritma adalah deretan langkah-langkah komputasi yang mentransformasikan data masukan menjadi keluaran
Algoritma adalah deretan instruksi yang jelas untuk memecahkan masalah, yaitu untuk memperoleh keluaran yang diinginkan dari suatu masukan dalam jumlah waktu yang terbatas.
Algoritma adalah prosedur komputasi yang terdefinisi dengan baik yang menggunakan beberapa nilai sebagai masukan dan menghasilkan beberapa nilai disebut keluaran. Jadi, algoritma adalah deretan langkah komputasi yang mentransformasikan masukan menjadi keluaran.
Mari kita tinjau kembali masalah mengurutkan kartu. Jika kita mempunyai setumpuk kartu yang berjumlah n = 50 buah, maka secara tradisional langkah-langkah yang bisa dilakukan orang kalau mengurutkan kartu adalah dengan mencari kartu bernomor terkecil terlebih dahulu, lalu letakkan pada posisi pertama (atas). Selanjutnya, cari kartu dengan nomor terkecil berikutnya, lalu letakkan di bawah kartu pertama. Begitulah, kita mencari kartu dengan nomor terkecil ketiga, keempat, dan seterusnya, sampai hanya tersisa satu kartu (kalau sudah tersisa satu kartu maka tidak perlu diurutkan lagi), dan kita memperoleh tumpukan kartu yang seluruh kartunya sudah terurut dari nomor kecil ke besar. Langkah-langkah pengurutan 50 buah kartu dapat kita tuliskan sebagai berikut (setiap langkah diberi nomor urut 1, 2, 3 dan seterusnya):
1. Cari kartu dengan nomor terkecil
2. Tempatkan kartu tersebut pada posisi paling atas
3. Cari kartu dengan nomor terkecil berikutnya
4. Tempatkan kartu tersebut di bawah kartu pertama
5. Cari kartu dengan nomor terkecil berikutnya
6. Tempatkan kartu tersebut di bawah kartu kedua
.......................................
xx . Cari kartu dengan nomor terkecil berikutnya
xxx. Tempatkan kartu tersebut di bawah kartu ke - 48
(tersisa satu kartu lagi, tetapi tidak perlu diurutkan)
Perhatikan bahwa sebenarnya di dalam rangkaian langkah-langkah di atas terjadi pengulangan dua langkah penting, yaitu (i) cari kartu dengan nomor terkecil, dan (ii) temptakan kartu tersebut pada posisi yang tepat. Kedua langkah utama ini diulang berkali-kali sampai hanya tersisa sebanyak 1 kartu saja (berarti jumlah pengulangan adalah sebanyak n = 50 - 1 = 49 kali). Maka, secara garis besar kita dapat menuliskan langkah-langkah mengurutkan n buah kartu sebagai berikut :
1. Cari kartu dengan nomor terkecil di antara kartu yang tesisa.
2. Tempatkan kartu tersebut pada posisi yang tepat.
3. Ulangi kembali dari langkah 1 sebanyak n-1 kali.
Langkah-langkah yang kita tuliskan di atas itulah yang disebut algoritma. Dikatakan bahwa kita telah menspesifikan algoritma pengurutan. Perhatikan bahwa langkah 1 dan 2 masih perlu lebih dirinci lagi. Bagaimana langkah-langkah mencari nomor terkecil ? Bagaimana menempatkan nilai terkecil pada posisi yang seharusnya, apakah memerlukan proses pertukaran tempat dengan kartu yang lain? Ya.. itulah asiknya pemrograman :)