1 ###############################
2 # Kod ditulis Magnus Lie Hetland
3 # Diperoleh daripada http://hetland.org/coding/python/quicksort.py
4 # Laman induk http://hetland.org/writing/instant-python.html
5 # Kod ini sebahagian daripada tutorial tentang Python
6 # Anotasi telah diterjemahkan ke dalam bahasa Melayu
7 # Jangan tulis nombor baris dalam kod anda!
8
9 # Kod bermula pada baris 11
10 ###############################
11 #!/usr/bin/env python
12
13 "Everybody's favourite sorting algorithm... :)"
14
15 def partition(list, start, end):
16 pivot = list[end] # Pemetakan sekitar nilai terakhir value
17 bottom = start-1 # Bermula pada kawasan di luar pemetakan
18 top = end # Ditto
19
20 done = 0
21 while not done: # Sehingga semua unsur disekat
22
23 while not done: # Sehingga kita jumpa unsur janggal ...
24 bottom = bottom+1 # ... gerakkan bahagian bawah ke atas.
25
26 if bottom == top: # Jika kita sampai di atas...
27 done = 1 # ... tugas kita selesai.
28 break
29
30 if list[bottom] > pivot: # Adakah bahagian bawah terkeluar?
31 list[top] = list[bottom] # Letakkannya di atas
32 break # ... dan mula mencari dari atas.
33
34 while not done: # Sehingga kita jumpa unsur di luar tempat ...
35 top = top-1 # ... gerakkan bahagian ata ke bawah.
36
37 if top == bottom: # Jika kita samapi di bawah ...
38 done = 1 # ... tugas kita selesai.
39 break
40
41 if list[top] < pivot: # Adakah bahagian atas terkeluar dari tempatnya?
42 list[bottom] = list[top] # Jika ya, letakkannya di bawah ...
43 break # ... dan mula mencari dari bawah
44
45 list[top] = pivot # Letak pangsi (pivot) pada tempatnya.
46 return top # Pulangkan titik tercerai
47
48
49 def quicksort(list, start, end):
50 if start < end: # Jika terdapat dua atau lebih unsur ...
51 split = partition(list, start, end) # ... sekat subsenarai ...
52 quicksort(list, start, split-1) # ... dan isih kedua-dua bahagian.
53 quicksort(list, split+1, end)
54 else:
55 return
56
57
58 if __name__=="__main__": # Jika skrip ini dilaksana sebagai program:
59 import sys
60 list = map(int,sys.argv[1:]) # Dapatkan semua argumen
61 start = 0
62 end = len(list)-1
63 quicksort(list,start,end) # Isih senarai argumen
64 import string
65 print string.join(map(str,list)) # Cetak senarai yang diisih
66 # Kod berakhir