#include<iostream> using namespace std; void Merge(int r[],int r1[],int s,int m,int t) { int i=s,j=m+1,k=s; while(i<=m && j<=t) { if(r[i]<=r[j]) r1[k++] = r[i++]; else r1[k++] = r[j++]; } while(i<=m) r1[k++] = r[i++]; while(j<=t) r1[k++] = r[j++]; } void MergeSort(int r[],int s,int t) { int m,r1[1000]; if (s==t) return; else { m=(s+t)/2; MergeSort(r,s,m); MergeSort(r,m+1,t); Merge(r,r1,s,m,t); for(int i=s; i<=t; i++) r[i] = r1[i]; } } int main() { int r[8] = {1,13,12,2,17,3,15,14}; MergeSort(r, 0, 7); for(int i=0; i<8; i++) cout<<" "<<r[i]; return 0; }每行代码什么意思
时间: 2024-03-19 18:42:35 浏览: 50
这是一个使用归并排序算法进行排序的程序。具体解释如下:
1. `#include<iostream>`:引入输入输出库。
2. `using namespace std`:命名空间声明。
3. `void Merge(int r[],int r1[],int s,int m,int t)`:定义归并排序中归并操作的函数,其中`r[]`为待排序数组,`r1[]`为归并操作时用于存放结果的数组,`s`为待排序数组的起始位置,`m`为待排序数组的中间位置,`t`为待排序数组的终止位置。
4. `int i=s,j=m+1,k=s;`:定义三个变量`i`、`j`、`k`,分别表示待排序数组的前半部分、后半部分和归并结果数组的下标。其中,`i`初始值为`s`,`j`初始值为`m+1`,`k`初始值为`s`。
5. `while(i<=m && j<=t)`:循环条件为`i`小于等于中间位置`m`并且`j`小于等于终止位置`t`。
6. `if(r[i]<=r[j]) r1[k++] = r[i++]; else r1[k++] = r[j++];`:如果待排序数组前半部分的元素小于等于后半部分的元素,则将前半部分的元素放入归并结果数组中;否则,将后半部分的元素放入归并结果数组中。
7. `while(i<=m) r1[k++] = r[i++];`:将剩下的前半部分的元素放入归并结果数组中。
8. `while(j<=t) r1[k++] = r[j++];`:将剩下的后半部分的元素放入归并结果数组中。
9. `void MergeSort(int r[],int s,int t)`:定义归并排序的函数,其中`r[]`为待排序数组,`s`为待排序数组的起始位置,`t`为待排序数组的终止位置。
10. `if (s==t) return;`:如果起始位置等于终止位置,则返回。
11. `else { m=(s+t)/2; MergeSort(r,s,m); MergeSort(r,m+1,t); Merge(r,r1,s,m,t); for(int i=s; i<=t; i++) r[i] = r1[i]; }`:否则,将待排序数组分为前半部分和后半部分,分别对其进行归并排序,然后将两个有序的子数组归并为一个有序的数组。
12. `int main()`:主函数。
13. `int r[8] = {1,13,12,2,17,3,15,14};`:定义一个大小为8的数组`r`并初始化。
14. `MergeSort(r,0,7);`:对数组进行归并排序。
15. `for(int i=0; i<8; i++) cout<<" "<<r[i];`:输出排序后的数组。
16. `return 0;`:程序结束。
阅读全文