MATLAB双向冒泡排序怎么实现(求详细步骤)
你好同学,matlab两头冒泡排序算法可以这么做(基本上都注释了):
clc;clear
array = [1,3,2,3,8,4]; % 待排序的数组
left = 1; % 左边为1
right = numel(array); % 右边为数组的长度
shift = 1; % 初始shift
while (left < right)
for i = left : right-1 % 左到右排列
if (array(i) > array(i+1)) % 如果左边大于右边
array([i,i+1])= array([i+1,i]); % 交换顺序
shift = i;
end
end
right = shift; % 更新右端位置
for i = right-1:-1:left % 右到左排列
if (array(i) > array(i+1)) % 如果左边大于右边
array([i,i+1])= array([i+1,i]); % 交换顺序
shift = i + 1;
end
end
left = shift; % 更新左端位置
end
disp('最终排列好的数组为')
disp(array)
这个例子输出的结果为:
最终排列好的数组为
1 2 3 3 4 8
可见排序正确输出了结果
一个是从右往左排序,一个是从左往右排序,具体步骤参考:
int high = table.length;
int left = 1;
int right = high - 1;
int t = 0;
do {
//正向部分
for (int i = right; i >= left; i--)
{
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
t = i;
}
}
left = t + 1;
//反向部分
for (int i = left; i < right + 1; i++)
{
if (table[i] < table[i - 1])
{
int temp = table[i];
table[i] = table[i - 1];
table[i - 1] = temp;
t = i;
}
}
right = t - 1;
} while (left <= right);