Pengurutan merupakan sesuatu yang umum dan sering diperlukan. Saat belajar algoritma dan pemrograman, topik pengurutan biasanya selalu ada. Masalah pengurutan ini juga sering muncul dalam programming, baik itu dalam programming ilmu komputer (seperti soal-soal ICPC, TopCoder, dll) maupun dalam programming dunia industri.
Andaikan kita seorang software developer yang sedang mengerjakan proyek web sepak bola. Dalam web tersebut, kita akan menampilkan klasmen suatu liga. Nah, buat yang belum mengerti apa itu klasmen, begini penjelasannya.
Klasmen merupakan tabel berisi data hasil pertandingan. Hasil pertandingan yang dimaksud adalah:
- jumlah pertandingan yang sudah dijalani (Wins + Draws + Loses [lihat 3 item selanjutnya!])
- jumlah pertandingan yang berakhir dengan dimenangkan (Wins, disingkat menjadi W)
- jumlah pertandingan yang berakhir seri (Draws, disingkat menjadi D)
- jumlah pertandingan yang berakhir dengan kekalahan (Loses, disingkat menjadi L)
- jumlah gol ke gawang lawan (Goals For, disingkat menjadi GF)
- jumlah gol ke gawang sendiri (Goals Against, disingkat menjadi GA)
- selisih gol (Goals Difference, disingkat menjadi GD, yaitu GF – GA)
- poin (Points, disingkat menjadi Pts, yaitu 3 * W + D)
Klasmen disusun berdasarkan poin. Tim yang memiliki poin lebih besar akan berada di atas, demikian sebaliknya. Jika poin kedua sama, diurutkan berdasarkan selisih gol. Tim yang memiliki selisih gol lebih besar akan berada di atas, demikian sebaliknya.
Perhatikan data hasil pertandingan (pertengahan Januari 2012) dari enam klub English Premier League berikut:
Klub/Tim Wins Draws Loses Goals-For Goals-Against
-----------------------------------------------------------------
Arsenal 11 3 6 36 28
Chelsea 12 4 5 40 25
Liverpool 9 8 4 24 18
Manchester City 15 3 2 56 16
Manchester United 15 3 3 52 20
Tottenham Hotspur 14 4 3 39 21
Tabel di atas masih berisi data mentah dan belum diurutkan (urutan sementara berdasarkan nama klub). Untuk mengurutkannya, kita harus menghitung poin dan selisih goal, sebagai berikut:
Klub W D L GF GA Pts(1) GD(2)
----------------------------------------------------
Arsenal 11 3 6 36 28 36 8
Chelsea 12 4 5 40 25 40 15
Liverpool 9 8 4 24 18 35 6
Manchester City 15 3 2 56 16 48 40
Manchester United 15 3 3 52 20 48 32
Tottenham Hotspur 14 4 3 39 21 46 18
Keterangan
(1) Pts = points = poin
(2) GD = goals difference = selisih gol
Maka klasmen akan diperoleh sebagai berikut:
Klub W D L GF GA Pts GD
----------------------------------------------
Manchester City 15 3 2 56 16 48 40
Manchester United 15 3 3 52 20 48 32
Tottenham Hotspur 14 4 3 39 21 46 18
Chelsea 12 4 5 40 25 40 15
Arsenal 11 3 6 36 28 36 8
Liverpool 9 8 4 24 18 35 6
Perhatikan bahwa data sekarang telah diurut berdasarkan poin (Pts) dan selisih gol (GD). Ada dua klub yang memiliki poin sama, yaitu Manchester City dan Manchester United. Tetapi, karena selisih gol Manchester City lebih besar, klub tersebut berada di atas.
Sekarang, anggap data hasil pertandingan tersebut disimpan di tabel tbl_klasmen dalam database. Tabel tersebut memiliki struktur seperti ini:
Field Type
------------------------
team_name VARCHAR
wins INTEGER
draws INTEGER
loses INTEGER
goals_for INTEGER
goals_against INTEGER
Dan berisi enam data seperti yang diperlihatkan pada tabel pertama di atas.
Jika menggunakan query SQL, maka untuk mendapatkan klasmen akan semudah ini:
SELECT *, (3 * wins + draws) AS points, (goals_for - goals_against) AS goals_difference
FROM `tbl_klasmen`
ORDER BY points DESC, goals_difference DESC;
Masalah selesai.
Bagaimana kalau datanya tidak berasal dari tabel database?
Read the rest of this entry »
Komentar Terkini