циклы — C ++: индекс вне диапазона

Вот функция, с которой у меня проблема:

ivec sort_index( vec list, int length ) {  //UNSORTED VECTOR OF INPUT VALUEAS

ivec index;
index = zeros_i(N);
float temp = 0;
int temp2 = 0;

for ( int j = 0 ; j<N ; j++){
index[j]=j; // VALUES IN INCREASING ORDER
}

int i = 1;
while ( i < length ){
for (int k = i; list[k - 1] > list[k]; k--){
temp = list[k - 1];  //BUBBLE SORT
list[k - 1] = list[k];
list[k] = temp;

temp2 = index[k - 1];  //IN THE SAME MOMENT - DATA IS BEING SHUFFLED
index[k - 1] = index[k];
index[k] = temp2;
}
i++;
}

return index;  //FUNCTION RETURNS VECTOR WITH SHUFFLED VALUES

N такой же как length и длина list

Я отладил этот код в Visual Studio 2012 и обнаружил, что есть проблема в строке:

for (int k = i; list[k - 1] > list[k]; k--){

Проблема касается ошибки Out of Range.

Я могу предоставить Call Stack, если это необходимо.

Может ли кто-нибудь помочь мне с изменением этого while а также for цикл, чтобы сохранить функциональность sort_index() функционировать?

С наилучшими пожеланиями,

JR

3

Решение

На второй итерации

for (int k = i; list[k - 1] > list[k]; k--){

к равно 0 и list[k - 1] вызовет исключение

3

Другие решения

Конечно, это должно быть:

для (int k = i; (k> 0) && (список [k — 1]> список [k]); к -) {

в противном случае, кажется, нет ничего, что могло бы помешать k сбросить начало массива.

2