Python'da çeşitli sıralama yöntemleri ve algoritmaları kullanarak listeleri, dizileri, sözlükleri vb. sıralamak için Python Sort işlevini nasıl kullanacağınızı öğrenin:
Sıralama, verileri artan veya azalan bir sıra düzeninde sıralamak için kullanılan bir tekniktir.
Çoğu zaman büyük projelerin verileri doğru sırada düzenlenmez ve bu, gerekli verilere verimli bir şekilde erişirken ve bunları getirirken sorun yaratır.
Bu sorunu çözmek için sıralama teknikleri kullanılır. Python çeşitli sıralama teknikleri sunar Örneğin, Kabarcık sıralaması, Ekleme sıralaması, Birleştirme sıralaması, Quicksort vb.
Bu eğitimde, Python'da çeşitli algoritmalar kullanarak sıralamanın nasıl çalıştığını anlayacağız.
Python Sıralama
Python Sıralama Sözdizimi
Sıralama yapmak için Python yerleşik bir işlev olan " sort() " işlevini sağlar. Bir listenin veri öğelerini artan sırada veya azalan sırada sıralamak için kullanılır.
Bu kavramı bir örnekle açıklayalım.
Örnek 1:
``` a = [ 3, 5, 2, 6, 7, 9, 8, 1, 4 ] a.sort() print( " List in ascending order: ", a ) ```
Çıktı:
Bu örnekte, verilen sırasız liste " sort( ) " fonksiyonu kullanılarak artan şekilde sıralanır.
Örnek 2:
``` a = [ 3, 5, 2, 6, 7, 9, 8, 1, 4 ] a.sort( reverse = True ) print( " List in descending order: ", a ) ```
Çıktı
Yukarıdaki örnekte, verilen sırasız liste " sort( reverse = True ) " işlevi kullanılarak ters sırada sıralanır.
Sıralama Algoritmalarının Zaman Karmaşıklığı
Zaman Karmaşıklığı, bilgisayarın belirli bir algoritmayı çalıştırmak için harcadığı süredir. Üç tür zaman karmaşıklığı durumu vardır.
- En kötü durum: Bilgisayarın programı çalıştırmak için harcadığı maksimum süre.
- Ortalama bir vaka: Bilgisayarın programı çalıştırması için minimum ve maksimum arasında geçen süre.
- En iyi durum: Bilgisayarın programı çalıştırmak için harcadığı minimum süre. Zaman karmaşıklığının en iyi durumudur.
Karmaşıklık Notasyonları
Büyük Oh Notasyonu, O: Big oh notasyonu, algoritmaların çalışma süresinin üst sınırını ifade etmenin resmi yoludur. En kötü durum zaman karmaşıklığını ölçmek için kullanılır veya algoritmanın tamamlanması için geçen en büyük süreyi söyleriz.
Büyük omega notasyonu, : Büyük omega notasyonu, algoritmaların çalışma süresinin en düşük sınırını ifade etmenin resmi yoludur. En iyi durum zaman karmaşıklığını ölçmek için kullanılır veya algoritma tarafından alınan mükemmel zaman miktarını söyleriz.
Teta Notasyonu, : Teta gösterimi, algoritmanın tamamlanması için geçen sürenin alt ve üst sınırlarının her ikisini de ifade etmenin resmi yoludur.
Python'da Sıralama Yöntemleri
Kabarcık Sıralama
Kabarcık sıralaması, kaba kuvvet tekniğini kullanan verileri sıralamanın en basit yoludur. Her veri öğesini yineleyecek ve kullanıcıya sıralanmış verileri sağlamak için diğer öğelerle karşılaştıracaktır.
Bu tekniği anlamak için bir örnek verelim:
- Bize " 10, 40, 7, 3, 15 " elemanlarına sahip bir dizi verildi. Şimdi, Python'daki Kabarcık sıralama tekniğini kullanarak bu diziyi artan bir sırada düzenlememiz gerekiyor.
- İlk adım, diziyi verilen sıraya göre düzenlemektir.
- "Yineleme 1 "de, bir dizinin ilk elemanını diğer elemanlarla tek tek karşılaştırıyoruz.
- Kırmızı oklar, ilk elemanların bir dizinin diğer elemanlarıyla karşılaştırılmasını tanımlamaktadır.
- Dikkat ederseniz "10", "40 "tan küçüktür, bu nedenle aynı yerde kalır ancak bir sonraki eleman "7", "10 "dan küçüktür. Bu nedenle değiştirilir ve ilk sıraya gelir.
- Yukarıdaki işlem, öğeleri sıralamak için tekrar tekrar gerçekleştirilecektir.
- " Yineleme 2 " de ikinci eleman bir dizinin diğer elemanları ile karşılaştırılır.
- Karşılaştırılan eleman küçükse değiştirilecek, aksi takdirde aynı yerde kalacaktır.
- "Yineleme 3 "te üçüncü eleman bir dizinin diğer elemanları ile karşılaştırılır.
- Son " Yineleme 4 " de sondan ikinci eleman bir dizinin diğer elemanları ile karşılaştırılır.
- Bu adımda dizi artan sırada sıralanır.
Kabarcık sıralama programı
`` def Bubble_Sort(sıralanmamış_list): for i in range(0,len(sıralanmamış_list)-1): for j in range(len(sıralanmamış_list)-1): if(sıralanmamış_list[j]>sıralanmamış_list[j+1]): temp_storage = sıralanmamış_list[j] sıralanmamış_list[j] = sıralanmamış_list[j+1] sıralanmamış_list[j+1] = temp_storage return sıralanmamış_list sıralanmamış_list = [5, 3, 8, 6, 7, 2] print("Sıralanmamış Liste: ", sıralanmamış_list) print("Kabarcık Sıralaması Kullanılarak Sıralanmış ListeTechnique: ", Bubble_Sort(unsorted_list)) ```
Çıktı
Kabarcık Sıralamanın Zaman Karmaşıklığı
- En kötü durum: Kabarcık sıralaması için en kötü zaman karmaşıklığı O( n 2).
- Ortalama bir vaka: Kabarcık sıralaması için ortalama zaman karmaşıklığı O( n 2).
- En iyi durum: Kabarcık sıralaması için en iyi zaman karmaşıklığı O(n)'dir.
Avantajlar
- Çoğunlukla kullanılır ve uygulaması kolaydır.
- Kısa süreli depolama tüketmeden veri öğelerini değiştirebiliriz.
- Daha az alan gerektirir.
Dezavantajlar
- Çok sayıda büyük veri öğesiyle uğraşırken iyi performans göstermemiştir.
- İhtiyacı var n Sıralanacak her "n" sayıda veri öğesi için 2 adım.
- Gerçek dünya uygulamaları için gerçekten iyi değildir.
Ekleme Sıralaması
Ekleme sıralaması, oyun kartlarını sıralamaya benzer şekilde çalışan kolay ve basit bir sıralama tekniğidir. Ekleme sıralaması, her bir elemanı diğeriyle tek tek karşılaştırarak elemanları sıralar. Eleman diğerinden büyük veya küçükse, elemanlar seçilir ve diğer elemanla değiştirilir.
Bir örnek verelim
- Bize " 100, 50, 30, 40, 10 " elemanlarına sahip bir dizi verilir.
- İlk olarak, diziyi düzenler ve karşılaştırmaya başlarız.
- İlk adımda " 100 " ikinci eleman " 50 " ile karşılaştırılır. " 50 " büyük olduğu için " 100 " ile değiştirilir.
- İkinci adımda, yine ikinci eleman " 100 " üçüncü eleman " 30 " ile karşılaştırılır ve yer değiştirir.
- Şimdi, dikkat ederseniz " 30 " ilk sıraya geliyor çünkü yine " 50 " den daha küçük.
- Karşılaştırma, bir dizinin son elemanına kadar gerçekleşecek ve sonunda sıralanmış verileri elde edeceğiz.
Ekleme sıralaması için program
`` def InsertionSort(dizi): for i in range(1, len(dizi)): key_value = dizi[i] j = i-1 while j>= 0 and key_value <dizi[j] : dizi[j + 1] = dizi[j] j -= 1 dizi[j + 1] = key_value dizi = [11, 10, 12, 4, 5] print("Sıralanmamış dizi: ", dizi) InsertionSort(dizi) print ("Insertion Sort kullanılarak sıralanmış dizi: ") for i in range(len(dizi)): print (dizi[i]) ```
Çıktı
Ekleme sıralamasının Zaman Karmaşıklığı
- En kötü durum: Ekleme sıralaması için en kötü zaman karmaşıklığı O( n 2).
- Ortalama bir vaka: Ekleme sıralaması için ortalama zaman karmaşıklığı O( n 2).
- En iyi durum: Insertion sort için en iyi zaman karmaşıklığı O(n)'dir.
Avantajlar
- Basit ve uygulaması kolaydır.
- Az sayıda veri elemanı ile çalışırken iyi performans gösterir.
- Uygulanması için daha fazla alana ihtiyaç duymaz.
Dezavantajlar
- Çok sayıda veri öğesini sıralamak yararlı değildir.
- Diğer sıralama teknikleriyle karşılaştırıldığında iyi performans göstermez.
Birleştirme sıralaması
Bu sıralama yöntemi, öğeleri belirli bir sıraya göre sıralamak için böl ve fethet yöntemini kullanır. Birleştirme sıralaması yardımıyla sıralama yapılırken, öğeler yarıya bölünür ve ardından sıralanır. Tüm yarılar sıralandıktan sonra, öğeler mükemmel bir düzen oluşturmak için tekrar birleştirilir.
Bu tekniği anlamak için bir örnek verelim
- Elimizde bir dizi var " 7, 3, 40, 10, 20, 15, 6, 5 ". 7 elemanlı bu diziyi ikiye bölersek ( 0 + 7 / 2 = 3 ).
- İkinci adımda, elemanların her birinde 4 eleman bulunan iki parçaya bölündüğünü göreceksiniz.
- Ayrıca, elemanlar tekrar bölünür ve her biri 2 elemana sahiptir.
- Bu işlem dizide sadece bir eleman kalana kadar devam edecektir. Resimdeki 4 numaralı adıma bakınız.
- Şimdi, öğeleri sıralayacağız ve bölündüğümüz gibi birleştirmeye başlayacağız.
- 5 numaralı adımda 7'nin 3'ten büyük olduğunu fark ettiyseniz, bunları değiştireceğiz ve bir sonraki adımda birleştireceğiz ve bunun tersi de geçerlidir.
- Sonunda, dizimizin artan sırada sıralandığını fark edeceksiniz.
Birleştirme sıralaması için program
``` def MergeSort(arr): if len(arr)> 1: middle = len(arr)//2 L = arr[:middle] R = arr[middle:] MergeSort(L) MergeSort(R) i = j = k = 0 while i <len(L) and j <len(R): if L[i] <R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 while i <len(L): arr[k] = L[i] i += 1 k += 1 while j <len(R): arr[k] = R[j] j += 1 k += 1 def PrintSortedList(arr): for i inrange(len(arr)): print(arr[i],) print() arr = [12, 11, 13, 5, 6, 7] print("Verilen dizi", end="\n") PrintSortedList(arr) MergeSort(arr) print("Sıralanan dizi: ", end="\n") PrintSortedList(arr) ```
Çıktı
Birleştirme sıralamasının zaman karmaşıklığı
- En kötü durum: Birleştirme sıralaması için en kötü zaman karmaşıklığı O( n log( n )).
- Ortalama bir vaka: Birleştirme sıralaması için ortalama zaman karmaşıklığı O( n log( n )).
- En iyi durum: Birleştirme sıralaması için en iyi zaman karmaşıklığı O( n log( n )).
Avantajlar
- Bu sıralama tekniği için dosya boyutu önemli değildir.
- Bu teknik, genellikle sırayla erişilen veriler için iyidir. Örneğin, bağlı listeler, teyp sürücüsü, vb.
Dezavantajlar
- Diğer sıralama tekniklerine kıyasla daha fazla alan gerektirir.
- Diğerlerine göre nispeten daha az verimlidir.
Hızlı sıralama
Hızlı sıralama, bir Liste veya dizinin öğelerini sıralamak için yine böl ve yönet yöntemini kullanır. Pivot öğeleri hedefler ve öğeleri seçilen pivot öğeye göre sıralar.
Örneğin
- Bize " 1,8,3,9,4,5,7 " elemanlarına sahip bir dizi verilir.
- " 7 " nin bir pilot eleman olduğunu varsayalım.
- Şimdi diziyi öyle bir şekilde böleceğiz ki sol taraf pivot eleman " 7 " den küçük elemanları ve sağ taraf pivot eleman " 7 " den büyük elemanları içerecek.
- Şimdi " 1,3,4,5 " ve " 8, 9 " olmak üzere iki dizimiz var.
- Yine, her iki diziyi de yukarıda yaptığımız gibi bölmek zorundayız. Tek fark, pivot elemanların değiştirilmesidir.
- Dizideki tek elemanı elde edene kadar dizileri bölmemiz gerekir.
- Sonunda, tüm pivot elemanları soldan sağa doğru bir sırayla toplayın ve sıralanmış diziyi elde edeceksiniz.
Hızlı sıralama için program
'' def Array_Partition( arr, en düşük, en yüksek ): i = ( en düşük-1 ) pivot_element = arr[ en yüksek ] for j in range( en düşük, en yüksek ): if arr[ j ] <= pivot_element: i = i+1 arr[ i ], arr[ j ] = arr[ j ], arr[ i ] arr[ i+1 ], arr[ en yüksek ] = arr[ en yüksek ], arr[ i+1 ] return ( i+1 ) def QuickSort( arr, en düşük, en yüksek ): if len( arr ) == 1: return arr if lowest <highest: pi = Array_Partition(arr, en düşük, en yüksek ) QuickSort( arr, en düşük, pi-1 ) QuickSort( arr, pi+1, en yüksek ) arr = [ 9, 6, 7, 8, 0, 4 ] n = len( arr ) print( " Sıralanmamış dizi: ", arr ) QuickSort( arr, 0, n-1 ) print( " Hızlı Sıralama kullanılarak sıralanmış dizi: " ) for i in range( n ): print( " %d " % arr[ i ] ) ```
Çıktı
Hızlı sıralamanın zaman karmaşıklığı
- En kötü durum: Hızlı sıralama için en kötü zaman karmaşıklığı O( n 2).
- Ortalama bir vaka: Hızlı sıralama için ortalama zaman karmaşıklığı O( n log( n )).
- En iyi durum: Hızlı sıralama için en iyi zaman karmaşıklığı O( n log( n )).
Avantajlar
- Python'daki en iyi sıralama algoritması olarak bilinir.
- Büyük miktarda veriyi işlerken kullanışlıdır.
- Ek alan gerektirmez.
Dezavantajlar
- En kötü durum karmaşıklığı, kabarcık sıralaması ve ekleme sıralamasının karmaşıklıklarına benzer.
- Bu sıralama yöntemi, sıralanmış listeye zaten sahip olduğumuzda kullanışlı değildir.
Yığın sıralama
Yığın sıralama, İkili arama ağacının gelişmiş versiyonudur. Yığın sıralamada, bir dizinin en büyük elemanı her zaman ağacın köküne yerleştirilir ve daha sonra kök ile yaprak düğümleri karşılaştırılır.
Örneğin:
- Bize "40, 100, 30, 50, 10" elemanlarına sahip bir dizi verilir.
- İçinde " adım 1 " dizideki elemanların varlığına göre bir ağaç yaptık.
- " içinde Adım 2 " maksimum yığın yapıyoruz, yani elemanları azalan sırada düzenliyoruz. En büyük eleman en üstte (kök) ve en küçük eleman en altta (yaprak düğümler) yer alacaktır. Verilen dizi " 100, 50, 30, 40, 10 " olur.
- İçinde " adım 3 " bir dizinin minimum elemanlarını bulabilmemiz için minimum yığın yapıyoruz. Bunu yaparak maksimum ve minimum elemanları elde ediyoruz.
- İçinde " Adım 4 " Aynı adımları uygulayarak sıralanmış diziyi elde ederiz.
Yığın sıralama için program
`` def HeapSortify( arr, n, i ): larger_element = i left = 2 * i + 1 right = 2 * i + 2 if left <n and arr[ larger_element ] <arr[ left ]: larger_element = left if right <n and arr[ larger_element ] <arr[ right ]: larger_element = right if larger_element != i: arr[ i ], arr[ larger_element ] = arr[ larger_element ], arr[ i ] HeapSortify( arr, n, larger_element ) def HeapSort( arr): n = len( arr ) for i in range( n//2 - 1, -1, -1 ): HeapSortify( arr, n, i ) for i in range( n-1, 0, -1 ): arr[ i ], arr[ 0 ] = arr[ 0 ], arr[ i ] HeapSortify( arr, i, 0 ) arr = [ 11, 10, 12, 4, 5, 6 ] print( " Sıralanmamış dizi: ", arr ) HeapSort( arr ) n = len( arr ) print( " Heap Sort tarafından sıralanmış dizi: " ) for i in range( n ): print( arr[ i ] ) ```
Çıktı
Yığın Sıralamanın Zaman Karmaşıklığı
- En kötü durum: Heap sort için en kötü zaman karmaşıklığı O( n log( n )).
- Ortalama bir vaka: Heap sort için ortalama zaman karmaşıklığı O( n log( n )).
- En iyi durum: Yığın sıralama için en iyi zaman karmaşıklığıO( n log( n )).
Avantajlar
- Daha çok üretkenliği nedeniyle kullanılmaktadır.
- Bir in-place algoritması olarak uygulanabilir.
- Büyük depolama gerektirmez.
Dezavantajlar
- Elemanları sıralamak için alana ihtiyaç vardır.
- Öğeleri sıralamak için ağaç yapar.
Sıralama Teknikleri Arasında Karşılaştırma
Sıralama Yöntemi | En iyi durum zaman karmaşıklığı | Ortalama vaka süresi karmaşıklığı | En kötü durum zaman karmaşıklığı | Uzay karmaşıklığı | İstikrar | Yerinde |
---|---|---|---|---|---|---|
Kabarcık sıralaması | O(n) | O(n2) | O(n2) | O(1) | Evet | Evet |
Ekleme sıralaması | O(n) | O(n2) | O(n2) | O(1) | Evet | Evet |
Hızlı sıralama | O(n log(n)) | O(n log(n)) | O(n2) | O(N) | Hayır | Evet |
Birleştirme sıralaması | O(n log(n)) | O(n log(n)) | O(n log(n)) | O(N) | Evet | Hayır |
Yığın sıralama | O(n log(n)) | O(n log(n)) | O(n log(n)) | O(1) | Hayır | Evet |
Yukarıdaki karşılaştırma tablosunda " O " yukarıda açıklanan Big Oh gösterimidir, " n " ve " N " ise girişin boyutunu ifade eder.
Sıkça Sorulan Sorular
S #1) Python'da sort () nedir?
Cevap ver: Python'da sort(), listeleri veya dizileri belirli bir sıraya göre sıralamak için kullanılan bir işlevdir. Bu işlev, büyük projeler üzerinde çalışırken sıralama işlemini kolaylaştırır. Geliştiriciler için çok faydalıdır.
S #2) Python'da nasıl sıralama yaparsınız?
Cevap ver: Python, öğeyi sıralamak için kullanılan çeşitli sıralama teknikleri sağlar. Örneğin, Hızlı sıralama, Birleştirme sıralaması, Kabarcık sıralaması, Ekleme sıralaması, vb. Tüm sıralama teknikleri verimli ve anlaşılması kolaydır.
S #3) Python sort () nasıl çalışır?
Cevap ver: sort() işlevi, verilen diziyi kullanıcıdan bir girdi olarak alır ve sıralama algoritmasını kullanarak belirli bir sıraya göre sıralar. Algoritmanın seçimi kullanıcının seçimine bağlıdır. Kullanıcılar, kullanıcının ihtiyaçlarına bağlı olarak Hızlı sıralama, Birleştirme sıralaması, Kabarcık sıralaması, Ekleme sıralaması vb. kullanabilir.
Sonuç
Yukarıdaki eğitimde, Python'da sıralama tekniğini genel sıralama teknikleriyle birlikte ele aldık.
- Kabarcık Sıralama
- Ekleme Sıralaması
- Hızlı Sıralama
Zaman karmaşıklıklarını ve avantajlarını ve dezavantajlarını öğrendik. Ayrıca yukarıdaki tüm teknikleri karşılaştırdık.