Bunu (basamak sayısı O(n)nerede n) şu şekilde yapabilirsiniz:
Sağdan başlayarak, ilk basamak çiftini, sol basamak sağ basamaktan daha küçük olacak şekilde bulursunuz. Sol basamağa "basamak-x" ile bakalım. X basamağının sağındaki x basamağından daha büyük olan en küçük sayıyı bulun ve x basamağının hemen soluna yerleştirin. Son olarak, kalan basamakları artan sırada sıralayın - zaten azalan sırada olduklarından , yapmanız gereken tek şey onları tersine çevirmek (doğru yere yerleştirilebilen basamak x için kaydedin O(n)) .
Bir örnek bunu daha açık hale getirecektir:
123456784987654321
bir numara ile başla
123456784 987654321
^ sol basamağın sağdan daha az olduğu sağdan ilk yer
Basamak "x" 4'tür
123456784 987654321
^ Sağda 4'ten büyük en küçük rakamı bulun
123456785 4 98764321
^ 4'ün soluna yerleştirin
123456785 4 12346789
123456785123446789
^ 5'in sağındaki rakamları sıralayın.
'4' zaten azalan sıradaydı, tek yapmamız gereken
siparişlerini tersine çevirin ve '4' için doğru yeri bulun
Doğruluk kanıtı:
Rakam dizelerini ve rakamlar için küçük harfleri tanımlamak için büyük harfler kullanalım. Sözdizimi ABaracı "dizeleri birleştirme Ave B" . <sözcük dizisi, basamak dizeleri eşit uzunlukta olduğunda tamsayı sıralaması ile aynıdır.
Orijinal N numaramız AxB, xtek basamaklı ve Bazalan şekilde sıralanan formdadır .
Numara olan bizim algoritması tarafından bulundu AyCnerede, y ∈ Bküçük sayıdır > x (bu yol nedeniyle bulunması gerekir xseçildi yukarıya bakınız) ve Csıralı artan olduğunu.
Varsayalım ki (aynı rakamları kullanarak) bir sayı N'vardır AxB < N' < AyC. N'ile başlamalı Aya da aralarında düşemezdi, böylece formda yazabiliriz AzD. Şimdi eşitsizliğimiz, her üç rakam dizesinin de aynı rakamları içerdiği yerle AxB < AzD < AyCeşdeğerdir xB < zD < yC.
Bunun gerçek olabilmesi için sahip olmalıyız x <= z <= y. Yana yen küçük rakamdır > x, zbu yüzden ya, aralarında olamaz z = xya z = y. Söyle z = x. Sonra bizim eşitsizlik olduğu xB < xD < yCanlamına gelir B < Dnereye hem Bve Daynı basamaktan. Ancak, B sıralı inen bu yüzden orada olması ise bunun daha büyük olanlar basamağı ile hiçbir dize. Böylece sahip olamayız B < D. Aynı adımları takiben, eğer görüyoruz z = y, biz olamaz D < C.
Bu nedenle var N'olamaz, yani algoritmamız bir sonraki en büyük sayıyı doğru bir şekilde bulur.