Basit JavaScript sıralama algoritmaları

İçindekiler

Algoritma, tanımı gereği sıralı bir kümedir. (Bu çok önemli) aynı türden tüm problemlerin çözümünü bulmak için bir hesaplama yapmamızı sağlayan sistematik işlemler. Başka bir deyişle, her zaman aşağıdaki kalıbı takip eden bir dizi talimattır:

  • Kesinlik: Her adımı veya talimatı benzersiz ve net bir şekilde açıklamanız gerekir.
  • sonlu: Yürütülecek talimatların sayısı sınırlı olmalıdır.
  • Tanım: Aynı girdi verileri her zaman aynı çıktı bilgilerini sağlamalıdır.
  • Giriş: Girdi elemanlarının sayısı sıfır veya daha fazla olabilir.
  • Çözünürlük: Her zaman çıktı veri(ler)i olacak bir sonuç üretmelidir.

Bir algoritma belirli bir programlama dilinde uygulandığında, bilgisayarda çalıştırılabilen bir program haline gelir, bu nedenle bir programın bilgisayarın kullanması için belirli bir dilde yazılmış bir algoritma veya algoritmalar kümesi olduğunu söyleyebiliriz. yorumlayabilir. Bu durumda bu programa hesaplama algoritması denir. Öte yandan, çalıştırmak için bir bilgisayara ihtiyaç duymuyorsa, hesaplamalı olmayan algoritmalardan bahsediyoruz.

Bizim durumumuzda hakkında konuşacağız hesaplama algoritmaları.

Algoritmanın ne olduğunu bilerek, sıralama algoritmalarına veya aynısı olan, önceden sıralanmış rastgele yerleştirilmiş öğelerle başlangıçta sağlanan bir listeyi sıralamaya ve döndürmeye yarayan algoritmaya odaklanacağız.
NS 3 sıralama algoritması en iyi bilinenler Kabarcık sıralama veya balona göre sıralama, Seçim sıralama veya seçime göre sıralama ve Ekleme, eklemeye göre sıralama veya sıralama. Hepsi, n kereye kadar yineleme veya tekrarlama ile çözüldükleri için basit algoritmalar veya yöntemler olarak kabul edilir.

1. Kabarcık sıralama veya balona göre sıralamaÖrnek olarak dört değere sahip bir dizi alarak, bu durumda basitlik için dört sayı algoritmanın nasıl çalıştığını göreceğiz.

Dizi = (4, 7, 8, 5, 9);

En yüksekten en düşüğe, yani (9, 8, 7, 5, 4) sıralı olarak iade etmenizi istiyoruz.

Bunu yapmak için yapmamız gereken ilk şey, en büyük olan ilk iki değeri sormaktır. İkinci değerin birinciden büyük olması durumunda olduğu gibi değiştirilmeleri gerekir, diğer yandan zaten sipariş edilmişlerse olduğu gibi bırakırız.
Daha sonra aynı işlem ikinci ve üçüncü değerlerle tekrarlanmalıdır. Bu durumda üçüncü değer daha büyüktür, bu yüzden onu = (7, 8, 4, 5, 9) dizimizi bırakarak değiştiririz.
Daha sonra üçüncü ve dördüncü değerlerle önceki adımı tekrarlıyoruz ve tekrar değiştiriyoruz. (7, 8, 5, 4, 9).
Ve son olarak, ilk yinelemeden sonra şu olur: (7, 8, 5, 9, 4).
Yine de sıralanmamıştır, ancak son öğenin, bütünün sağındakinin, eğer en küçük sayı olarak sıralanırsa 4'ün olması sağlanmıştır.
Dizimizi sıralamak için bir sonraki turda, sıralı olduğunu zaten bildiğimiz için sonuncuyu hesaba katmak artık gerekli değildir, bu nedenle birinci ve ikinci öğeyi, ardından ikinci ve üçüncü öğeyi ve son olarak da diziyi karşılaştırırdık. üçüncü ve dördüncü eleman ve dizi şu şekilde kalır: (8, 7, 9, 5, 4).
Şimdi son ve sondan bir önceki eleman sıralandı.
Birinci ve ikinci değerleri karşılaştırarak başka bir tur yapıyoruz ve ardından ikinci ve üçüncü ve dizi şöyle görünüyor: (8, 9, 7, 5, 4).
Son üç öğe zaten sıralanmıştır, bu nedenle diziyi tamamen sıralı bırakmak yalnızca bir tur daha sürer: (9, 8, 7, 5, 4).

Bu nasıl burburja algoritması, çünkü her dönüşte son eleman bir balon gibi yükselir ve sıralanır.

Şimdi uygulandı JavaScript O çok basit:

işlev balonu (myArray) {var tam = myArray.length; for (var temp = 1; temp <boyut; temp ++) {for (sol değişken = 0; sol <(boy - sıcaklık); sol ++) {var sağ = sol + 1; if (myArray [sol] <myArray [sağ] {sort (myArray, sol, sağ);}}} myArray'i döndür;}
Fonksiyonumuza bir dizi gönderiyoruz ve içinde yaptığımız ilk şey boyutunu hesaplamak, dizideki eleman sayısını hesaplamak.
Daha sonra dizimizden, elemanların eksi bir olduğu kadar çok kez geçen bir dış döngü yaratırız. (tamamen sıralanması için gerekli zamanlar oldukları için).
Dahili olarak, her birini bir sonraki ile karşılaştıran değerlerin üzerinden geçen başka bir döngü oluşturuyoruz ve eğer soldaki, sağdakinden küçükse, daha sonra göreceğimiz sıralama fonksiyonu ile bunları değiş tokuş ediyor.
Sonunda sıralı diziyi döndürür.
işlev sıralama (myArray, değer1, değer2) {var temp = myArray [değer1]; myArray [değer1] = myArray [değer2]; myArray [değer2] = sıcaklık; myArray'i döndür;}
burada değer1 değiştirilecek ilk öğenin endeksidir ve değer2, değiştirilecek ikinci öğenin endeksidir.

2. Seçim sıralamasıAşağıda göreceğimiz algoritma, baloncuktaki gibi öğeleri tek tek hareket ettirmiyor, önce tam diziyi geçiyor ve ardından takip ettiğimiz kriterlere göre (örneğin en yüksekten) yerleştirme için doğru öğeyi seçiyor. Algoritma, bir elemanı seçerek, alarak ve tek bir hareketle doğru konumuna hareket ettirerek adını bu şekilde alır.

Array = (4, 7, 8, 5, 9) öncesi ile aynı örnekte, örneğin en yüksekten en düşüğe sıralamak istersek, önce 9'u seçip ilk sıraya koyardık ve 4 sonuncuyu işgal ederdi. konum (9, 7, 8, 5, 4). İkinci turda 8'i seçecek ve doğru pozisyonda kalmak için 7 ile değiştirecekti. Sonraki turlarda, zaten sipariş edildiğinden hiçbir şeyi değiştirmem.

Bu algoritmanın kodu aşağıdaki gibi olacaktır:

işlev seçimi (myArray) {var tam = myArray.length; for (var temp = 0; temp <boyut -1; temp ++) {majör = temp; for (var check = temp + 1; check <size; check ++) {if (myArray [check] <myArray [major] {major = check;}} sort (myArray, major, check);} return myArray;}

Kod, balonunkine benzer şekilde çalışır, ancak dış for döngüsü 0'dan N-2'ye kadar olan değerlerden geçer (bunlar, balondaki gibi 1 ile N-1 arasındaki adımlarla aynı sayıdadır ancak işlem farklıdır) ) her dönüşte onları doğru konuma getirmek için doğrudan elemanlar üzerinde çalışmak.
Tüm öğelerin sıralanması için gereken dönüş sayısı N-1 balonundakiyle aynıdır, çünkü her yinelemeden sonra yerine yerleştirilmiş bir öğeyi ve sonraki dönüşlerde göz ardı edebileceğimiz öğeyi bırakırız.

Ancak, bazı öğelerin zaten sipariş edildiğini bulduğumuzda, kendi adımlarımızı kurtarmak için sıralama işlevini biraz değiştiririz:

işlev sıralama (myArray, değer1, değer2) {if (değer1 == değer2) {return myArray; } var temp = myArray [değer1]; myArray [değer1] = myArray [değer2]; myArray [değer2] = sıcaklık; myArray'i döndür;}
Bunu başarmak için, değerlerin eşleşip eşleşmediğini, yani zaten sipariş edilip edilmediğini kontrol ettiği bir if döngüsü ekledik.

3. Ekleme sıralamaSon olarak, aşağıda göreceğimiz gibi dizimizi yerleştirmek için her zaman N-1 iterasyonlarına ihtiyaç duymayacağımız için üçünün en verimli algoritmasını göreceğiz.

Bu yerleştirme algoritması, bir poker oyununda kartlar dağıtılırken kartların bir elinin yerleştirilmesine benzer şekilde çalışır.
Kartları genellikle takımlara göre ve içlerinde artan sırasına göre şu şekilde sıralarız:
İlk önce bir kart dağıtılır, sipariş edilen tek bir öğe (benzersiz olduğu için). Daha sonra küçükten büyüğe doğru sıralanmış “j” elemanları olduğunda, j + 1 elemanını alır ve önceden sıralanmış tüm elemanlarla karşılaştırırız. Daha küçüğünü bulursa, büyük olanlar sağa kaymış olacağından bu eleman (j+1) eklenir, diğerlerine kaydırılır.

NS algoritma ekle tercüme JavaScript dili Şöyleki:

işlev ekleme (myArray) {var tam = myArray.length, temp, place; for (var nesne = 0; nesne = 0 && myArray [yer]> sıcaklık; yer--) {myArray [yer + 1] = myArray [yer]; } myArray [yer + 1] = sıcaklık; } myArray'i döndür;}

Ve böylece üç basit sıralama algoritması ve JavaScript'te uygularken kod.

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave