Python - Algoritma Pengurutan
Pengurutan mengacu pada pengaturan data dalam format tertentu. Algoritme pengurutan menentukan cara untuk mengatur data dalam urutan tertentu. Urutan paling umum dalam urutan numerik atau leksikografis.
Pentingnya pengurutan terletak pada kenyataan bahwa pencarian data dapat dioptimalkan hingga tingkat yang sangat tinggi, jika data disimpan dengan cara yang diurutkan. Pengurutan juga digunakan untuk merepresentasikan data dalam format yang lebih mudah dibaca. Di bawah ini kita melihat lima implementasi pengurutan dengan python.
- Bubble Sort
- Gabungkan Sortir
- Sortir Penyisipan
- Sortir Kerang
- Sortir Pilihan
Bubble Sort
Ini adalah algoritma berbasis perbandingan di mana setiap pasangan elemen yang berdekatan dibandingkan dan elemen ditukar jika tidak berurutan.
def bubblesort(list):
# Swap the elements to arrange in order
for iter_num in range(len(list)-1,0,-1):
for idx in range(iter_num):
if list[idx]>list[idx+1]:
temp = list[idx]
list[idx] = list[idx+1]
list[idx+1] = temp
list = [19,2,31,45,6,11,121,27]
bubblesort(list)
print(list)
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
[2, 6, 11, 19, 27, 31, 45, 121]
Gabungkan Sortir
Merge sort terlebih dahulu membagi array menjadi dua bagian yang sama, lalu menggabungkannya dalam cara yang diurutkan.
def merge_sort(unsorted_list):
if len(unsorted_list) <= 1:
return unsorted_list
# Find the middle point and devide it
middle = len(unsorted_list) // 2
left_list = unsorted_list[:middle]
right_list = unsorted_list[middle:]
left_list = merge_sort(left_list)
right_list = merge_sort(right_list)
return list(merge(left_list, right_list))
# Merge the sorted halves
def merge(left_half,right_half):
res = []
while len(left_half) != 0 and len(right_half) != 0:
if left_half[0] < right_half[0]:
res.append(left_half[0])
left_half.remove(left_half[0])
else:
res.append(right_half[0])
right_half.remove(right_half[0])
if len(left_half) == 0:
res = res + right_half
else:
res = res + left_half
return res
unsorted_list = [64, 34, 25, 12, 22, 11, 90]
print(merge_sort(unsorted_list))
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
[11, 12, 22, 25, 34, 64, 90]
Sortir Penyisipan
Urutan penyisipan melibatkan menemukan tempat yang tepat untuk elemen tertentu dalam daftar yang diurutkan. Jadi pada awalnya kami membandingkan dua elemen pertama dan mengurutkannya dengan membandingkannya. Kemudian kami memilih elemen ketiga dan menemukan posisi yang tepat di antara dua elemen yang diurutkan sebelumnya. Dengan cara ini kami secara bertahap menambahkan lebih banyak elemen ke daftar yang sudah diurutkan dengan meletakkannya di posisi yang tepat.
def insertion_sort(InputList):
for i in range(1, len(InputList)):
j = i-1
nxt_element = InputList[i]
# Compare the current element with next one
while (InputList[j] > nxt_element) and (j >= 0):
InputList[j+1] = InputList[j]
j=j-1
InputList[j+1] = nxt_element
list = [19,2,31,45,30,11,121,27]
insertion_sort(list)
print(list)
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
[2, 11, 19, 27, 30, 31, 45, 121]
Sortir Kerang
Penyortiran Shell melibatkan penyortiran elemen yang jauh dari gema lainnya. Kami mengurutkan sublist besar dari list yang diberikan dan terus mengurangi ukuran list hingga semua elemen diurutkan. Program di bawah ini menemukan celah dengan menyamakannya dengan setengah dari panjang ukuran daftar dan kemudian mulai menyortir semua elemen di dalamnya. Kemudian kami terus mengatur ulang celah hingga seluruh daftar diurutkan.
def shellSort(input_list):
gap = len(input_list) // 2
while gap > 0:
for i in range(gap, len(input_list)):
temp = input_list[i]
j = i
# Sort the sub list for this gap
while j >= gap and input_list[j - gap] > temp:
input_list[j] = input_list[j - gap]
j = j-gap
input_list[j] = temp
# Reduce the gap for the next element
gap = gap//2
list = [19,2,31,45,30,11,121,27]
shellSort(list)
print(list)
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
[2, 11, 19, 27, 30, 31, 45, 121]
Sortir Pilihan
Dalam pemilihan urutan kita mulai dengan mencari nilai minimum dalam daftar yang diberikan dan memindahkannya ke daftar yang diurutkan. Kemudian kami mengulangi proses untuk setiap elemen yang tersisa dalam daftar yang tidak diurutkan. Elemen berikutnya yang memasuki daftar yang diurutkan dibandingkan dengan elemen yang ada dan ditempatkan pada posisinya yang benar. Jadi pada akhirnya semua elemen dari daftar yang tidak diurutkan diurutkan.
def selection_sort(input_list):
for idx in range(len(input_list)):
min_idx = idx
for j in range( idx +1, len(input_list)):
if input_list[min_idx] > input_list[j]:
min_idx = j
# Swap the minimum value with the compared value
input_list[idx], input_list[min_idx] = input_list[min_idx], input_list[idx]
l = [19,2,31,45,30,11,121,27]
selection_sort(l)
print(l)
Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -
[2, 11, 19, 27, 30, 31, 45, 121]