MATLAB实现归并排序
时间: 2023-10-14 11:12:18 浏览: 234
归并排序是一种经典的排序算法,其基本思想是将待排序序列分成两个子序列,递归地对子序列进行排序,然后将排好序的子序列合并成一个有序序列。下面是 MATLAB 实现归并排序的代码:
```matlab
function sorted_seq = merge_sort(seq)
% 归并排序算法
% 输入参数:待排序序列 seq
% 输出参数:排序后的序列 sorted_seq
if length(seq) <= 1 % 递归结束条件
sorted_seq = seq;
else
mid = floor(length(seq) / 2); % 求中间位置
left_seq = seq(1:mid); % 分割左子序列
right_seq = seq(mid+1:end); % 分割右子序列
left_sorted_seq = merge_sort(left_seq); % 递归排序左子序列
right_sorted_seq = merge_sort(right_seq); % 递归排序右子序列
sorted_seq = merge(left_sorted_seq, right_sorted_seq); % 归并左右子序列
end
end
function merged_seq = merge(left_seq, right_seq)
% 合并两个已排序的序列
% 输入参数:已排序的左子序列 left_seq 和已排序的右子序列 right_seq
% 输出参数:合并后的序列 merged_seq
i = 1; j = 1; k = 1;
merged_seq = zeros(length(left_seq) + length(right_seq), 1);
while i <= length(left_seq) && j <= length(right_seq)
if left_seq(i) < right_seq(j)
merged_seq(k) = left_seq(i);
i = i + 1;
else
merged_seq(k) = right_seq(j);
j = j + 1;
end
k = k + 1;
end
if i <= length(left_seq)
merged_seq(k:end) = left_seq(i:end);
else
merged_seq(k:end) = right_seq(j:end);
end
end
```
使用该函数进行排序的方式如下:
```matlab
seq = [5, 3, 8, 6, 4];
sorted_seq = merge_sort(seq);
disp(sorted_seq); % 输出 [3, 4, 5, 6, 8]
```
该代码实现了归并排序算法,并将其封装成一个 MATLAB 函数。函数接受一个待排序序列,返回一个排序好的序列。在函数内部,先判断序列是否已经有序,若已经有序,则直接返回;否则将序列分成两个子序列,分别递归排序,最后将排好序的子序列合并成一个有序序列。其中,合并两个子序列的函数 `merge()` 也是一个独立的函数。
阅读全文