2016-04-04 19 views
-1

Hızlı sıralama için kod yazdım. Benim sıralama yöntemi için bir hata alıyorum ama sorun nerede olduğunu görmüyorumRuby ile hızlı sıralama gerçekleştirme

def sort (numbers, first, last) 
if first >= last 
    return 
end 

if first < last 
    pivot = first 
    j = first 
    k = last 

    while (j < k) 
     if(numbers[j] >= numbers[pivot]) 
      j +=1 
      if(numbers[k] < numbers[pivot]) 
       k -=1 
       if(j <= k) 
        temp = numbers[j] 
        numbers[j] = numbers[k] 
        numbers[k] = temp 
       end 
      end 
     end 
    end 
    puts "end loop" 
    temp = numbers[pivot] 
    numbers[pivot]= numbers[k] 
    numbers[k] = temp 
    sort(numbers,first,k-1) 
    sort(numbers,k+1,last) 
end 
end 

a = [89, 23, 12, 67, 45, 78, 24, 56, 87, 73, 37] 
first = 0 

for i in 0...a.length 
puts a[i] 
end 

last = a.length - 1 
puts "Array Count is #{last}" 

sort(a, 0, last) 

for i in 0...a.length 
puts a[i] 
end 

hatası: sort': undefined method + @' nil için: NilClass (NoMethodError) herkes bu hata

ne hakkında olduğunu bana söyleyebilir
+2

Başlamak için, j + l'i 'j + = 1' ve' k '' yerine 'k - = 1' ile değiştirin. [neden ruby'nin ++ operatörü yok] (http://stackoverflow.com/questions/3660563/why-doesnt-ruby-support-i-or-i-increment-decrement-operators) –

+0

Alt listelerinizden birinin, k 1 veya liste uzunluğu olduğunda olduğu gibi boş olduğundan şüphelenir. – Octopus

+1

Lütfen satır numaraları ve backtrace dahil olmak üzere hatanın tam metnini verin. Bundan tek bildiğim, bir yere sıfır değere eklemeye çalıştığın. Ayrıca lütfen bir [mcve] sağlamaya çalışın. – Shelvacu

cevap

0

Öncelikle, kodunuz bilgisayarımda çalışıyor (++ operatörleri ile birkaç hatayı düzelterek). Dosyayı nasıl çalıştırdığınıza dair bir sorun olmalı. İkincisi kod gerçekten Ruby kodu gibi görünmüyor (ruby gibi ++ operatöre sahip değildir). Örnek uygulamamı gözden geçir - Quick Sort

+0

Bu kod, j ++ 've' k-- '? –

+0

Bu bir yorum olmalı, cevap değil. –

+0

j ++ 'yi j + = 1 ile değiştirdim ve k ile aynı şekilde değiştirdim ancak "dizi sayısı 10" dan sonra çalıştırdığımda askıda kalıyor. Ctrl + C tuşlarına basarak programı sonlandırmak zorundayım. –