2013-08-31 4 views
1

Я выполняю сортировку, но продолжаю получать ошибку привязки индекса в языке Go.Перейти: array out of index panic error

Мой код следующий

func My_Partition(container []int, first_index int, last_index int) int { 
     var x int = container[last_index] 
     i := first_index - 1 

     for j := first_index; i < last_index; j++ { 
      if container[j] <= x { 
       i += 1 
       my_Swap(&container[i], &container[j]) 
      } 
     } 
     my_Swap(&container[i+1], &container[last_index]) 
     return i+1 
} 

я получаю сообщение об ошибке в строке «если контейнер [у] < = х», что говорит паника: ошибка во время выполнения: индекс вне диапазона

main.My_Partition(0x2101b20c0, 0x7, 0x7, 0x0, 0x6, ...) 
/Path/main.go:34 +0xff 

У кого-нибудь есть идея?

моя функция подкачки ниже

func my_Swap(a *int, b *int) { 
     temp := *a 
     *a = *b 
     *b = temp 
} 

, но я не думаю, что своп является проблемой.

ответ

1

У вас есть опечатка:

for j := first_index; i < last_index; j++ { 

Должно быть: достаточно

for j := first_index; j < last_index; j++ { 

Легко ошибиться :-)

Playground example

+0

Спасибо так много. Это была глупая ошибка и не могла понять в течение трех часов ... Спасибо! –

+2

@ dfsadxsadqwd213 не проблема, я делал подобные вещи много раз! Для справок в будущем вам не нужна специальная функция подкачки. Go поддерживает множественное присвоение, поэтому вы можете просто выполнить контейнер [i], контейнер [j] = контейнер [j], контейнер [i] ', без необходимости временных переменных. – Intermernet

+0

Это хорошо. Я кодировал в C mindset. Я должен был попробовать это, как в Ruby и Python. Спасибо –