Как я могу оптимизировать этот алгоритм сортировки пузырьков в MATLAB или заменить его каким-либо другим, более эффективным методом?

#matlab #octave

#matlab #октава

Вопрос:

Я хотел бы знать, как я мог бы оптимизировать этот алгоритм пузырьковой сортировки, который я создал в части кода MATLAB, или заменить его каким-либо другим, более эффективным методом, таким как быстрая сортировка, сортировка по времени или сортировка слиянием. В этом случае использовалась пузырьковая сортировка из-за того, что, когда элементы в массиве должны бытьупорядоченные меняются местами, позиции элементов в другом векторе, называемом категорией, также должны быть изменены, Спасибо

 % Boolean variable (flag) to enter and exit the while loop
sigueBucle= true;
% The categories and the distance between each point are sorted
[~, N]= size(dataBase);
while (sigueBucle == true)
    sigueBucle= false;
    % Bubble sort algorithm (sinking sort)
    for i = 2 : N
        if (diferencias(i-1) > diferencias(i))
            % Swap the place of the elements of the array categoria
            auxiliar_etiqueta= categoria(i);
            categoria(i)= categoria(i-1);
            categoria(i-1)= auxiliar_etiqueta;
            % Swap the place of the elements of the distance array
            auxiliar_distanc= diferencias(i);
            diferencias(i)= diferencias(i-1);
            diferencias(i-1)= auxiliar_distanc;
            % Change sigueBucle to T (true) to re-enter the loop
            sigueBucle= true;
        end
    end
end
 

Комментарии:

1. MATLAB имеет встроенную функцию sort , которую вы должны использовать. Посмотрите документацию, чтобы узнать, как изменить порядок второго массива таким же образом.

2. Кроме того, в MATLAB вы можете поменять местами два значения в массиве следующим образом: a([i,j]) = a([j,i]) .

Ответ №1:

Используйте стандартную sort функцию и захватите ее второй вывод « ix «, чтобы получить индексный вектор, который позволит вам соответствующим образом изменить порядок других массивов.

 x = % ... some data ...
y = % ... another vector that needs to be kept ordered like x
[x,ix] = sort(x);  % Sort x
y = y(ix); % Apply the same re-ordering to y