Strand sıralama - Strand sort

Strand Sıralama Animasyonu

Strand sıralama bir yinelemeli sıralama algoritması bu, bir listenin öğelerini artan sıraya göre sıralar. Var Ö (n2) giriş listesi ters sıralandığında ortaya çıkan en kötü zaman karmaşıklığı.[1] En iyi durumu var zaman karmaşıklığı Girdi halihazırda sıralanmış bir liste olduğunda oluşan O (n).[2] Strand sıralama yerinde uzay karmaşıklığı O (n) olduğu için.[1]

Algoritma ilk önce bir listenin ilk öğesini bir alt listeye taşır.[1] Daha sonra alt listedeki son öğeyi orijinal listedeki sonraki her bir öğe ile karşılaştırır.[1] Orijinal listede alt listedeki son elemandan daha büyük bir eleman olduğunda, eleman orijinal listeden çıkarılır ve alt listeye eklenir.[1] Bu işlem, alt listedeki son öğe, orijinal listedeki kalan öğelerle karşılaştırılana kadar devam eder.[1] Alt liste daha sonra yeni bir liste halinde birleştirilir.[1] Bu işlemi tekrarlayın ve tüm öğeler sıralanana kadar tüm alt listeleri birleştirin.[1] Bu algoritmaya sarmal sıralama adı verilir, çünkü sıralanmamış elemanlar içinde birer birer kaldırılan sıralı elemanlar dizisi vardır.[1] Bu algoritma aynı zamanda J Sırala 40'tan az öğe için.[3]

Misal

Bu örnek, kitapta sağlanan algoritmanın açıklamasına dayanmaktadır, BT Destekli Uygulamalar ve Yükselen Yönetim Paradigmaları.[1]

Aşama 1: Bir sayı listesiyle başlayın: {5, 1, 4, 2, 0, 9, 6, 3, 8, 7}

Adım 2: Daha sonra listenin ilk öğesini yeni bir alt listeye taşıyın: alt liste şunu içerir: {5}

Aşama 3: Ardından orijinal listeyi yineleyin ve 5'ten büyük bir sayı olana kadar her sayıyı 5 ile karşılaştırın.

  • 1 <5 yani 1 alt listeye eklenmez.
  • 4 <5 yani 4 alt listeye eklenmez.
  • 2 <5 yani 2 alt listeye eklenmez.
  • 0 <5 yani 0 alt listeye eklenmez.
  • 9> 5 böylece 9 alt listeye eklenir ve orijinal listeden çıkarılır.

4. Adım: Şimdi 9'u 9'dan büyük bir sayı olana kadar orijinal listedeki kalan öğelerle karşılaştırın.

  • 6 <9 yani 6 alt listeye eklenmez.
  • 3 <9 yani 3 alt listeye eklenmez.
  • 8 <9 yani 8 alt listeye eklenmez.
  • 7 <9 yani 7 alt listeye eklenmez.

Adım 5: Şimdi, alt listeyi çözüm listesi adı verilen yeni bir listeyle birleştirmek için 9'u karşılaştıracak başka öğe yok.

5. adımdan sonra, orijinal liste {1, 4, 2, 0, 6, 3, 8, 7} içerir

Alt liste boş ve çözüm listesi {5, 9} içeriyor

6. Adım: Orijinal listenin ilk öğesini alt listeye taşıyın: alt liste şunu içerir: {1}

7. Adım: Orijinal listeyi yineleyin ve 1'den büyük bir sayı olana kadar her sayıyı 1 ile karşılaştırın.

  • 4> 1 yani 4 alt listeye eklenir ve 4 orijinal listeden çıkarılır.

8. Adım: Şimdi 4'ü 4'ten büyük bir sayı olana kadar orijinal listedeki diğer öğelerle karşılaştırın.

  • 2 <4 yani 2 alt listeye eklenmez.
  • 0 <4 yani 0 alt listeye eklenmez.
  • 6> 4 yani 6 alt listeye eklenir ve orijinal listeden çıkarılır.

9. Adım: Şimdi 6'yı 6'dan büyük bir sayı olana kadar orijinal listedeki kalan öğelerle karşılaştırın.

  • 3 <6 yani 3 alt listeye eklenmez.
  • 8> 6 yani 8 alt listeye eklenir ve orijinal listeden çıkarılır.

Adım 10: Şimdi 8'den büyük bir sayı olana kadar orijinal listedeki diğer elemanlarla 8'i karşılaştırın.

  • 7 <8 yani 7 alt listeye eklenmez.

11. Adım: Orijinal listede {8} ile karşılaştırılacak başka öğe kalmadığından, alt liste çözüm listesiyle birleştirilir. Şimdi orijinal liste {2, 0, 3, 7} içeriyor, alt liste boş ve çözüm listesi şunları içeriyor: {1, 4, 5, 6, 8, 9}.

Adım 1/2: Orijinal listenin ilk öğesini alt listeye taşıyın. Alt liste {2} içerir

13. Adım: Orijinal listeyi tekrarlayın ve 2'den büyük bir sayı olana kadar her sayıyı 2 ile karşılaştırın.

  • 0 <2 yani 0 alt listeye eklenmez.
  • 3> 2 böylece 3 alt listeye eklenir ve orijinal listeden çıkarılır.

14. Adım: Şimdi 3'ü 3'ten büyük bir sayı olana kadar orijinal listedeki diğer öğelerle karşılaştırın.

  • 7> 3 böylece 7 alt listeye eklenir ve orijinal listeden çıkarılır.

Adım 15: Orijinal listede {7} ile karşılaştırılacak başka öğe kalmadığından, alt liste çözüm listesiyle birleştirilir. Orijinal liste artık {0} içeriyor, alt liste boş ve çözüm listesi şunları içeriyor: {1, 2, 3, 4, 5, 6, 7, 8, 9}.

16. Adım: Orijinal listenin ilk öğesini alt listeye taşıyın. Alt liste {0} içerir.

17. Adım: Orijinal liste artık boş olduğu için alt liste çözüm listesiyle birleştirilir. Çözüm listesi artık şunları içerir: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Artık orijinal listede başka öğe yoktur ve çözüm listesindeki tüm öğeler, artan sayısal sıraya göre başarıyla sıralanmıştır.

Uygulama

Strand Sort birçok ekleme ve silme gerektirdiğinden, algoritmayı uygularken bağlantılı bir liste kullanmak en iyisidir.[2] Bağlı listeler, yineleyiciler kullanılarak öğelerin hem eklenmesi hem de kaldırılması için sabit süre gerektirir. Bağlantılı listeden geçme süresi doğrudan listenin girdi boyutuyla ilgilidir.[4] Aşağıdaki uygulama Java 8'de yapılmıştır ve kitaptaki algoritmanın açıklamasına dayanmaktadır, BT Destekli Uygulamalar ve Yükselen Yönetim Paradigmaları.[1]

  1 paket iplikçik;  2   3 ithalat java.util. *;  4   5 halka açık sınıf iplikçik {  6 	statik Bağlantılı liste<Tamsayı> solList = yeni Bağlantılı liste<Tamsayı>();  7 	statik int k = 0;  8   9 	/** 10 * Bu, özyinelemeli bir Dizi Sıralama yöntemidir. Bağlantılı bir liste alır 11 * parametresi olarak tamsayılar. Önce temel durumu kontrol eder. 12 * bağlantılı liste boş. Daha sonra iplikçik sıralama algoritmasına geçer. 13 * bağlantılı liste boş. 14 	 *  15 * @param origList: 16 * bağlantılı tamsayı listesi 17 	 */ 18 	halka açık statik geçersiz strandSortIterative(Bağlantılı liste<Tamsayı> origList) { 19  20 		// Temel Durum 21 		Eğer (origList.boş()) { 22 			dönüş; 23 		} 24  25 		Başka { 26 			// altListeyi oluşturun ve ilk öğeyi ekleyin 27 			// Alt listeye orijinal bağlantılı liste. 28 			// Ardından ilk öğeyi orijinal listeden kaldırın. 29 			Bağlantılı liste<Tamsayı> alt liste = yeni Bağlantılı liste<Tamsayı>(); 30 			alt liste.Ekle(origList.getFirst()); 31 			origList.removeFirst(); 32  33 			// Herhangi bir öğenin olup olmadığını kontrol ederek orijinal listeyi yineleyin 34 			// Alt listedeki öğeden büyük. 35 			int indeks = 0; 36 			için (int j = 0; j < origList.boyut(); j++) { 37 				Eğer (origList.almak(j) > alt liste.almak(indeks)) { 38 					alt liste.Ekle(origList.almak(j)); 39 					origList.Kaldır(j); 40 					j = j - 1; 41 					indeks = indeks + 1; 42 				} 43 			} 44 			// Alt listeyi çözüm listesine birleştirin. 45 			// Bu adım için iki durum var / 46 			// Durum 1: İlk özyinelemeli çağrı, tüm öğeleri 47 			// sıralı sırayla çözüm listesi 48 			Eğer (k == 0) { 49 				için (int ben = 0; ben < alt liste.boyut(); ben++) { 50  51 					solList.Ekle(alt liste.almak(ben)); 52 					k = k + 1; 53 				} 54  55 			} 56  57 			// Durum 2: İlk özyinelemeli çağrının ardından,  58 			// alt listeyi çözüm listesiyle birleştirin. 59 			// Bu, alt listedeki en büyük öğeyi karşılaştırarak çalışır (bu her zaman son öğedir) 60 			// çözüm listesindeki ilk eleman ile.  61 			Başka { 62 				int subEnd = alt liste.boyut() - 1; 63 				int solStart = 0; 64 				süre (!alt liste.boş()) { 65  66 					Eğer (alt liste.almak(subEnd) > solList.almak(solStart)) { 67 						solStart++; 68  69 					} Başka { 70 						solList.Ekle(solStart, alt liste.almak(subEnd)); 71 						alt liste.Kaldır(subEnd); 72 						subEnd--; 73 						solStart = 0; 74 					} 75  76 				} 77  78 			} 79  80 			strandSortIterative(origList); 81 		} 82  83 	} 84  85 	halka açık statik geçersiz ana(Dize[] argümanlar) { 86 		// Yeni bir bağlantılı Tamsayı listesi oluştur 87 		Bağlantılı liste<Tamsayı> origList = yeni Bağlantılı liste<Tamsayı>(); 88  89 		// Bağlantılı listeye şu tam sayıları ekleyin: {5, 1, 4, 2, 0, 9, 6, 3, 8, 7} 90  91 		origList.Ekle(5); 92 		origList.Ekle(1); 93 		origList.Ekle(4); 94 		origList.Ekle(2); 95 		origList.Ekle(0); 96 		origList.Ekle(9); 97 		origList.Ekle(6); 98 		origList.Ekle(3); 99 		origList.Ekle(8);100 		origList.Ekle(7);101 102 		strandSortIterative(origList);103 		// Çözüm listesini yazdırın104 		için (int ben = 0; ben < solList.boyut(); ben++) {105 			Sistem.dışarı.println(solList.almak(ben));106 		}107 108 	}109 110 }

Referanslar

  1. ^ a b c d e f g h ben j k BT destekli uygulamalar ve yeni ortaya çıkan yönetim paradigmaları. Gupta, I. C. (Ishwar Chandra), 1946-, Jaroliya, Deepak., Prestige Institute of Management and Research. (1. baskı). Indore: Prestige Yönetim ve Araştırma Enstitüsü. 2008. ISBN  9788174466761. OCLC  641462443.CS1 Maint: diğerleri (bağlantı)
  2. ^ a b "sarmal sıralama". xlinux.nist.gov. Alındı 2018-11-06.
  3. ^ Sudipta., Mukherjee (2008). C: 1000 problemleri ve çözümleri kullanan veri yapıları. Yeni Delhi: Tata McGraw-Hill. ISBN  9780070667655. OCLC  311311576.
  4. ^ "Bağlantılı Listeler". www.cs.cmu.edu. Alındı 2018-11-06.