学习链接:https://www.runoob.com/w3cnote/implementation-of-merge-sort.html
运行效果:
学习代码:(代码有误,待更新)
/* 合并排序算法是用分治策略实现对n个元素进行排序的算法 ,其基本思想是:将待排序的元素分成大小大致相同的 两个子集合,分别对两个子集和进行排序,最终将排好序的 子集合合并成所要求的排好序的集合。 */ #include<iostream> using namespace std; #define MAX 100 int arr[MAX]={0}; int tempArr[MAX]={0}; void mergeArr(int* arr,int left,int mid,int right,int* tempArr){//合并排好序的两个子集和数组 int i=left; int m=mid; int j=mid+1; int r=right; int k=1; while(i<=m&&j<=r){ if(arr[i]<=arr[j]){ tempArr[k++]=arr[i++]; } else{ tempArr[k++]=arr[j++]; } } while(i<=m){ tempArr[k++]=arr[i++]; } while(j<=r){ tempArr[k++]=arr[j++]; } for(int i=1;i<=k;i++){ arr[i]=tempArr[i]; } } void mergeSort(int* arr,int left,int right,int* tempArr){//合并排序 if(left<right){ int mid=(left+right)/2; mergeSort(arr,left,mid,tempArr); mergeSort(arr,mid+1,right,tempArr); mergeArr(arr,left,mid,left,tempArr); } } int main(){ int n,left,right; cout<<"请输入你想要对多少个数进行排序:"; cin>>n; cout<<"***********************************"<<endl; cout<<"请按照下面的提示输入你要排序的数据····要乖哦··"<<endl; cout<<"***********************************"<<endl; for(int i=1;i<=n;i++){ cout<<"请输入你要排序的第"<<i<<"个数:"; cin>>arr[i]; cout<<endl; } cout<<"*************************************"<<endl; cout<<"你已经完成要排序数据的录入····"<<endl; cout<<"你想要排序的起点为(>=1):"; cin>>left; cout<<"你想要排序的终点为(<="<<n<<"):"; cin>>right; cout<<"**********排序结果如下哒鸭******************************"<<endl; mergeSort(arr,left,right,tempArr); for(int i=1;i<=n;i++){ cout.width(4); cout<<arr[i]; } cout<<endl; return 0; }
Nearth==>分治策略006/合并算法
最新推荐文章于 2022-11-27 14:28:13 发布