2016-04-03 10 views
1

İkinci sayıdan başlayacağı bir diziyi sıralamaya çalışıyorum ve önceki sayının daha büyük olup olmadığını görmek için önce ona bakıyorum. Öyleyse, sayıları değiştirmek istiyorum, aksi halde numarayı olduğu yerde tut. Şu anda benim kodum bunu yapmıyor. Diziyi girdiğim tek şeyin altında değiştirdiğim şey, 2'nin 11'e dönüşmesi, ortada iki 11'inin olması. Neyin yanlış gidiyor?python takas sırası doğru çıktı vermiyor

#given an array of digits a of length N 
a = [7, 3, 11, 2, 6, 16] 
N = len(a) 

# moving forward along a starting from the second position to the end 

# define _sillysort(a, start_pos): 
#  set position = start_pos 
#  moving backwards along a from start_pos: 
#   if the a[position-1] is greater than a[position]: 
#    swap a[position-1] and a[position] 
def sillysort(a, start_pos): 
    a_sorted = [] 
    start_pos = a[1] 
    for position in a: 
     if a[start_pos-1] >= a[start_pos]: 
      a[start_pos-1], a[start_pos] = a[start_pos], a[start_pos-1] 
     else: 
      a[start_pos-1] = a[start_pos] 
     a_sorted.append(position) 
     position += 1 
    return a_sorted 

Bu çalıştırmak, sillysort (a, K), bu çıkış elde [7, 3, 11, 11, 6, 16].

cevap

0

Kodunuz Zaten işlevinde bunu reinitialising neden sizin işlevine argüman olarak start_pos sağlıyorsanız konularda

start_pos = a[1]

bir çift vardır. Ayrıca, sıralamak istediğiniz dizi a ise, neden algoritmanızın start_pos dizisinin ikinci öğesi a kendisinin?

for position in a: 
     if a[start_pos-1] >= a[start_pos]: 
      a[start_pos-1], a[start_pos] = a[start_pos], a[start_pos-1] 
     else: 
      a[start_pos-1] = a[start_pos] 
     a_sorted.append(position) 
     position += 1 

for in döngü dizisi a üzerinden yineleme ve position dizinin elemanlarının değerleri alacaktır. Örnekte position aşağıdaki sıraya göre değer alacak:

7, 3, 11, 2, 6, 16

Ne döngü sonunda 1 ile neden konumunu artırılmıyor edilir olduğunu anlamıyorum. Ve bir kez daha, dizinin kendileri yerine diziyi indekslemek için dizinin içindeki değerleri kullanıyorsunuz.

Örneğinizde, start_posa[1] yani 3 değerini alacağından, kodunuz bir [3] ve bir [2] yani 2 ve 11'i karşılaştırır ve diğer koşula gider ve bir [3] = a [2 yapar ] ve böylece 2

pozisyonunda 11'i alabilirsiniz. Kendinizi muhtemelen değişken isimleri ile karıştırdınız. Bu sana yardımcı olup olmadığına bak.