Удаление из массива

255
12 апреля 2017, 12:58

Никак не могу понять этот алгоритм ,Может кто объяснит мне поэтапно... Буду благодарен

  searchKey=55;
        for(j=0;j<nElems;j++){ // Поиск удаляемого элемента 
            if(arr[j]==searchKey){
                break;
            }
        }
        for(int k = j;k<nElems-1;k++){   
         // Сдвиг последующих элементов 
             arr[k] = arr[k+1];
        }
           nElems--; // Уменьшение размера 
Answer 1
  • выше обьявлена переменная j в которой будет находиться индекс искомого элемента в массиве
  • первый цикл пробегается по массиву при каждой итерации идет проверка значения на искомое, если это так, то выходим из цикла через break
  • после этого цикла переменная j содержит индекс искомого значения в массиве
  • далее второй цикл сдвигает элементы влево начиная с индекса j
  • последний элемент массива становится "удаленным", на самом деле он есть, просто на него не будут обращать внимание циклы, так как переменная nElrms уменьшилась
Answer 2

В двух словах

Данный кусок кода "вырезает" из входной последовательности первый элемент со значением searchKey

А теперь подробнее:

searchKey - искомое значение в последовательности
for(j=0;j<nElems;j++) - проходим по последовательности от 0до nElems (скорее всего - это длина последовательности)
if(arr[j]==searchKey) { break; } - если j-й элемент последовательности arr равен searchKey (в данном случае 55), тогда break (прекращаем работу цикла, при этом j = индексу элемента со значением searchkey

for(int k = j;k<nElems-1;k++){   
         arr[k] = arr[k+1];
    } 

Проходим по этой же последовательности, только теперь не от начала до конца, а от j до nElems - 1 и текущему элементы последовательности присваиваем значение следующего (проще говоря, вырезаем элемент со значением searchKey)
nElems-- - уменьшаем длину последовательности на единицу.

Но, если говорить откровенно, то абсолютно согласен с оратором в комментариях. Вы используете массив и "вырезаете" из него значение, но вырезанием, честно говоря, это назвать нельзя. Так как вы вместо него подставляете оставшиеся элементы массива, но от этого его размер не изменяется, он как состоял из n элементов, так и состоит.

READ ALSO
Все случаи когда может выскочить InterruptedException?

Все случаи когда может выскочить InterruptedException?

Существует ограниченное количество случаев когда может выскочить InterruptedExceptionПонятно что это может произойти при вызове wait() или sleep(), они...

210
Как работать с drawBitmapMesh?

Как работать с drawBitmapMesh?

Саму ее я приблизительно разобрался как сделать

219