Python Segera/Python Segera/Quicksort

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