İplik sıralaması (İngilizce: Strand sort) bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Sıralanacak olan dizinin, sıralanmış alt dizilerinin oluşturularak bu alt dizilerin birleştirilmesi yoluyla sonucun oluşturulması mantığına dayanır. Algoritmanın her bir aşamasında ana dizinin üzerinden geçilir ve bu diziden zaten sıralanmış olan bir dizi eleman çıkarılır. Çıkarılan bu eleman dizileri daha sonra birleştirilir.
Algoritmanın adı, sıralanacak dizinin içinden çıkan kendi içinde sıralanmış alt dizilerin ipliklere benzetilmesinden gelmektedir. İplik sıralaması algoritması, ana diziden ipleri çıkarırken ve oluşan sıralı ipleri birleştirirken karşılaştırma kullandığı için bir karşılaştırma sıralamasıdır.
İplik sıralaması algoritmasının karmaşıklığı ortalamada O(n log n)'dir. Sıralanacak dizinin zaten sıralı olduğu en iyi durumda algoritmanın karmaşıklığı O(n), sıralanacak dizinin tersten sıralı olduğu en kötü durumda ise algoritmanın karmaşıklığı O(n2)'dir.
Örnek
- Sıralanacak dizinin üzerinden bir kere geçilir ve yükselen (sıralı) sayılar alınır.
- Sıralı olan alt dizi ilk yinelemenin ardından boş olan sıralanmış dizinin üstüne konur.
- Ana dizinin üzerinden yeniden geçilir ve kendi içinde sıralı yeni bir alt dizi çıkarılır.
- Artık sıralanmış dizi boş olmadığından yeni çıkarılan alt dizi sıralanmış diziyle birleştirilir.
- Alt dizi ve ana dizi boşalana kadar 3 ve 4. adımlar yinelenir.
Sıralanmamış dizi | Alt dizi | Sıralanmış dizi |
---|---|---|
3 1 5 4 2 | ||
1 4 2 | 3 5 | |
1 4 2 | 3 5 | |
2 | 1 4 | 3 5 |
2 | 1 3 4 5 | |
2 | 1 3 4 5 | |
1 2 3 4 5 |
Sözde Kodu
İplik sıralamasının yalın bir sözde kodu aşağıda verilmiştir:
procedure strandSort( A : list of sortable items ) defined as: while length( A ) > 0 clear sublist sublist[ 0 ] := A[ 0 ] remove A[ 0 ] for each i in 0 to length( A ) do: if A[ i ] > sublist[ last ] then append A[ i ] to sublist remove A[ i ] end if end for merge sublist into results end while return results end procedure
Uygulama Örnekleri
C# ile uygulama
Aşağıdaki program iplik sıralamasının C# kullanılarak oluşturulmuş bir uygulamasıdır:
public static LinkedList<int> sort(LinkedList<int> array) { LinkedList<int> results = new LinkedList<int>(); LinkedList<int> sublist = new LinkedList<int>(); while (array.Count != 0) { sublist.Clear(); sublist.AddLast(array.First.Value); array.RemoveFirst(); LinkedListNode<int> i = array.First; while (i != null) { if(i.Value >= sublist.Last.Value) { sublist.AddLast(i.Value); LinkedListNode<int> temp = i; i = i.Next; array.Remove(temp); } else { i = i.Next; } } i = results.First; while (sublist.Count != 0) { if (i == null) { results.AddLast(sublist.First.Value); sublist.RemoveFirst(); } else if (sublist.First.Value < i.Value) { results.AddBefore(i, sublist.First.Value); sublist.RemoveFirst(); } else { i = i.Next; } } } return results; }
Java ile uygulama
Aşağıdaki program iplik sıralamasının Java kullanılarak oluşturulmuş bir uygulamasıdır:
public static <E extends Comparable<? super E>> List<E> sort(Collection<E> coll) { List<E> results = new LinkedList<E>(); while (!coll.isEmpty()) { LinkedList<E> sublist = new LinkedList<E>(); Iterator<E> i = coll.iterator(); sublist.addLast(i.next()); while (i.hasNext()) { E val = i.next(); if (val.compareTo(sublist.getLast()) >= 0) { sublist.addLast(val); i.remove(); } } if (!results.isEmpty()) { ListIterator<E> li = results.listIterator(); E current = li.next(); while (!sublist.isEmpty()) { if (sublist.getFirst().compareTo(current) < 0) li.add(sublist.removeFirst()); else if (li.hasNext()) current = li.next(); else break; } } results.addAll(sublist); } return results; }
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Iplik siralamasi Ingilizce Strand sort bilgisayar bilimlerinde kullanilan bir siralama algoritmasidir Siralanacak olan dizinin siralanmis alt dizilerinin olusturularak bu alt dizilerin birlestirilmesi yoluyla sonucun olusturulmasi mantigina dayanir Algoritmanin her bir asamasinda ana dizinin uzerinden gecilir ve bu diziden zaten siralanmis olan bir dizi eleman cikarilir Cikarilan bu eleman dizileri daha sonra birlestirilir Algoritmanin adi siralanacak dizinin icinden cikan kendi icinde siralanmis alt dizilerin ipliklere benzetilmesinden gelmektedir Iplik siralamasi algoritmasi ana diziden ipleri cikarirken ve olusan sirali ipleri birlestirirken karsilastirma kullandigi icin bir karsilastirma siralamasidir Iplik siralamasi algoritmasinin karmasikligi ortalamada O n log n dir Siralanacak dizinin zaten sirali oldugu en iyi durumda algoritmanin karmasikligi O n siralanacak dizinin tersten sirali oldugu en kotu durumda ise algoritmanin karmasikligi O n2 dir OrnekSiralanacak dizinin uzerinden bir kere gecilir ve yukselen sirali sayilar alinir Sirali olan alt dizi ilk yinelemenin ardindan bos olan siralanmis dizinin ustune konur Ana dizinin uzerinden yeniden gecilir ve kendi icinde sirali yeni bir alt dizi cikarilir Artik siralanmis dizi bos olmadigindan yeni cikarilan alt dizi siralanmis diziyle birlestirilir Alt dizi ve ana dizi bosalana kadar 3 ve 4 adimlar yinelenir Siralanmamis dizi Alt dizi Siralanmis dizi3 1 5 4 21 4 2 3 51 4 2 3 52 1 4 3 52 1 3 4 52 1 3 4 51 2 3 4 5Sozde KoduIplik siralamasinin yalin bir sozde kodu asagida verilmistir pre b procedure b strandSort A list of sortable items b defined as b b while b length A gt 0 b clear b sublist sublist 0 A 0 b remove b A 0 b for each b i b in b 0 b to b length A b do b b if b A i gt sublist last b then b b append b A i b to b sublist b remove b A i b end if b b end for b b merge b sublist b into b results b end while b b return b results b end procedure b pre Uygulama OrnekleriC ile uygulama Asagidaki program iplik siralamasinin C kullanilarak olusturulmus bir uygulamasidir public static LinkedList lt int gt sort LinkedList lt int gt array LinkedList lt int gt results new LinkedList lt int gt LinkedList lt int gt sublist new LinkedList lt int gt while array Count 0 sublist Clear sublist AddLast array First Value array RemoveFirst LinkedListNode lt int gt i array First while i null if i Value gt sublist Last Value sublist AddLast i Value LinkedListNode lt int gt temp i i i Next array Remove temp else i i Next i results First while sublist Count 0 if i null results AddLast sublist First Value sublist RemoveFirst else if sublist First Value lt i Value results AddBefore i sublist First Value sublist RemoveFirst else i i Next return results Java ile uygulama Asagidaki program iplik siralamasinin Java kullanilarak olusturulmus bir uygulamasidir public static lt E extends Comparable lt super E gt gt List lt E gt sort Collection lt E gt coll List lt E gt results new LinkedList lt E gt while coll isEmpty LinkedList lt E gt sublist new LinkedList lt E gt Iterator lt E gt i coll iterator sublist addLast i next while i hasNext E val i next if val compareTo sublist getLast gt 0 sublist addLast val i remove if results isEmpty ListIterator lt E gt li results listIterator E current li next while sublist isEmpty if sublist getFirst compareTo current lt 0 li add sublist removeFirst else if li hasNext current li next else break results addAll sublist return results