MATLAB双向冒泡排序怎么实现

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);