#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