2016-03-22 30 views
1

Yakın zamanda görsel temelde bir seçim sıralama programı oluşturmaya çalışıyorum. Bir dizideki tamsayıları azalan sıraya göre sıralamayı başardım, ancak aynı yöntemi kullanmak için diziyi sıralama düzenini başarılı bir şekilde sıralamak için kullanmaya çalıştım ama başarılı bir şekilde aralık "hatası. Dediğim gibiVisual Basic Selection Sıralama "Endeks aralık dışı"

Sub sortDescending() 
    Dim array() As Integer = {3, 5, 200} 
    Dim maxPos As Integer 
    Dim firstI As Integer 
    While firstI <= UBound(array) 
     For i = firstI To UBound(array) 
      If array(i) > array(maxPos) Then 
       maxPos = i 
      End If 
     Next 
     Dim largestNumber As Integer = array(maxPos) 
     array(maxPos) = array(firstI) 
     array(firstI) = largestNumber 
     firstI = firstI + 1 
     maxPos = firstI 
     Console.WriteLine(largestNumber) 
    End While 
End Sub 

Sub sortAscending() 
    Dim array() As Integer = {3, 5, 200} 
    Dim minpos As Integer 
    Dim firstI As Integer 
    While firstI >= LBound(array) 
     For i = firstI To LBound(array) 
      If array(i) < array(minpos) Then 
       minpos = i 
      End If 
     Next 
     Dim smallestNumber As Integer = array(minpos) 
     array(minpos) = array(firstI) 
     array(firstI) = smallestNumber 
     firstI = firstI + 1 
     minpos = firstI 
     Console.WriteLine(smallestNumber) 
    End While 

, artan sıralama, ancak herhangi bir sorun ile çalışır yükselen biri bana hata veriyor: Aşağıda benim kodudur. Bunu nasıl düzelteceğimi gösterebilecek biri var mı? Teşekkürler :)

+0

Ne hattında bize bildirmeniz gerekir hatayı al. Ayrıca 'data = data.OrderByDescending (İşlev (x) x) .ToArray()' tek ihtiyacınız olan şeydir. – Plutonix

+0

yükselen için "OrderByDescending" için "OrderBy" değiştirmek Oh, benim hata, "Dim SmallestNumber As Integer = dizi (minpos) üzerinde hatayı alıyorum. Maalesef bu program bir atama içindir, bu nedenle seçim sıralama yöntemi kullanılarak yapılması gerekir:/ –

+0

'firstI> = LBound (dizi)' her zaman Doğrudur, bu nedenle döngüden çıkmayacaksınız ... 2'nin üzerine çıktığında, Endeks alanın dışındadır.Özel bir nedenle kendi sıralama rutini oluşturmuyorsanız , Plutonix'in önerdiği gibi yapmalı ve sınıflandırma yeteneklerini kullanmalısınız –

cevap

0

order by içinde yerleşik kullanmıyorsanız, seçim sıralama işlemini uygulamak için sıralama algoritmasını doğru şekilde tanımlamanız gerekir.

Döngü asla döngü ile karşılaştığınız sorun, her zaman doğru olarak inceler. Bunu, döngü için dönüştürdüm ve sonunda değiştirmeyi düzelttim.

Test vakanızın kullanıldığı bir işlev. MyArray ile bu işlevi çağırır.

Dim numbers = New Integer() {3, 5, 200}  
SortArray(numbers) 

kodu ne yapar:

1.Find dizideki en küçük öğesi.

2. Öğeyi ilk konumdan ve en küçük bulunanları değiştirin. Artık en küçük elemnet ilk konumuna gelir. bir tane daha az elemanı bulunan liste ile iki adımda yukarıda

3.Repeat. (ileri işlenmiş atılmadığı en küçük elemanı)

Final çıkış

enter image description here