【归并排序】 Merge_sort 实现源码 (自写)
2014-09-29 16:50
549 查看
学校算法老师给布置了个归并排序的实现作为作业……
实在闲着无事……请允许吾辈卖个萌做个简单的命令行界面程序,以下为源码。
过程中会有简单的解释语句的输出,所以过程看的还算清楚,用以对(int)1e9以下的正整数的归并排序实现源代码。
废话不多说,贴代码:
实在闲着无事……请允许吾辈卖个萌做个简单的命令行界面程序,以下为源码。
过程中会有简单的解释语句的输出,所以过程看的还算清楚,用以对(int)1e9以下的正整数的归并排序实现源代码。
废话不多说,贴代码:
#include <cmath> #include <cctype> #include <cstdio> #include <string> #include <cstdlib> #include <cstring> #include <iostream> #include <windows.h> #include <algorithm> using namespace std; typedef long long ll; //******************************// //*Author: okcd00 at 2014/09/24*// //*StuNo.: 20125209 *// //*Name : 陈点 物联网一班 *// //* 个人作品,请勿随意盗版哦 ~ *// //******************************// #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) ll arr[1024],al[512],ar[512]; string pause; bool cmp(const int a, const int b){return a > b;} void welcome() { cout<<"┏══════════════┓"<<endl; cout<<"┃Author: okcd00 ┃"<<endl; cout<<"┃StuNo.: 20125209 ┃"<<endl; cout<<"┃Time : 2014/09/24 ┃"<<endl; cout<<"┃From : 陈点 物联网一班 ┃"<<endl; cout<<"┣──────────────┨"<<endl; cout<<"┃ ★个人作品,请勿随意盗版★ ┃"<<endl; cout<<"┗══════════════┛"<<endl; } void menu() { system("cls"); cout<<"┏══════════════┓"<<endl <<"┃Author: okcd00 ┃"<<endl <<"┃StuNo.: 20125209 ┃"<<endl <<"┃Time : 2014/09/24 ┃"<<endl <<"┃From : 陈点 物联网一班 ┃"<<endl <<"┣──────────────┨"<<endl <<"┃ 请输入指令,以回车键结束 ┃"<<endl <<"┃★(s)start: 开始 MergeSort★┃"<<endl <<"┃★(q)quit : 结束程序并退出★┃"<<endl <<"┃★%others%: 请重新输入 ★┃"<<endl <<"┃★个人作品★★请勿随意盗版★┃"<<endl <<"┗══════════════┛"<<endl; } void end() { system("cls"); cout<<"┏══════════════┓"<<endl <<"┃Author: okcd00 ┃"<<endl <<"┃StuNo.: 20125209 ┃"<<endl <<"┃Time : 2014/09/24 ┃"<<endl <<"┃From : 陈点 物联网一班 ┃"<<endl <<"┣──────────────┨"<<endl <<"┃ ★ 程序结束,即将退出 ★ ┃"<<endl <<"┗══════════════┛"<<endl; } int mergetime=1; void get_merge(int l,int r) { if(l+1>=r) return; int pos1=0,pos2=0; for(int i=l;i<(l+r)/2;i++) al[i-l]=arr[i]; for(int i=(l+r)/2;i<r;i++) ar[i-(l+r)/2]=arr[i]; for(int i=l;i<r;i++) { if(pos2==r-(l+r)/2) arr[i]=al[pos1],pos1++; else if(pos1==(l+r)/2-l) arr[i]=ar[pos2],pos2++; else if(al[pos1]<=ar[pos2]) arr[i]=al[pos1],pos1++; else arr[i]=ar[pos2],pos2++; } cout<<"[第"<<mergetime++<<"次] getMerge: "<<"lef="<<l<<", rig="<<r<<endl; for(int i=l;i<r;i++) cout<<arr[i]<<"\t"; cout<<endl<<endl; } void do_merge(int l,int r) { int lef=l,rig=r; if(lef+1>=rig) return ; else { do_merge(lef,(lef+rig)/2); do_merge((lef+rig)/2,rig); get_merge(lef,rig); } } void merge_sort() { cout<<"—— 请输入你想要排序的数字 ——" <<endl; cout<<"——(以空格分隔,以-1结束) ——" <<endl; cout<<"我的数组为(数字个数不超过1K):"; int pos=0; ll now=0; while(1) { scanf("%I64d",&now); if(now!=-1) arr[pos++]=now; else break; } system("cls"); cout<<"★以下为我的数组★"<<endl; for(int i=0;i<pos;i++) { if(i!=0 && i%5==0) printf("┃\n"); printf("┃ %010I64d ",arr[i]); //if(arr[i]<(int)1e5) cout<<"\t"; } cout<<endl<<endl<<"——接下来开始进行归并排序——"<<endl<<endl; system("pause"); do_merge(0,pos); cout<<"——归并排序完毕,输出结果——"<<endl; for(int i=0;i<pos;i++) { if(i!=0 && i%5==0) printf("┃\n"); printf("┃ %010I64d ",arr[i]); //if(arr[i]<(int)1e5) cout<<"\t"; } cout<<endl; system("pause"); } int main() { string s; welcome(); system("pause"); while(1) { menu(); cin>>s; if(s=="quit"|| s=="q"|| s=="Q") break; else if(s=="s" || s=="S" ||s=="start") {merge_sort();break;} } end(); system("pause"); return 0; }
相关文章推荐
- 归并排序(merge sort)的实现
- 归并排序(Mergesort)之Java实现
- 归并排序(merge sort)算法实现
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
- 归并排序(mergeSort)之递归实现
- MergeSort(归并排序)算法Java实现
- 归并排序(merge sort)的实现
- Java 归并排序(MergeSort)算法实现
- 无聊写排序之 ---- 归并排序(MergeSort) 非递归实现
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
- 归并排序(MergeSort)Java实现
- 归并排序(merge sort)源码
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- 归并排序(merge_sort)的C语言实现
- 归并排序(2)MergeSort顺序实现之非预分配内存
- Java实现归并排序(Merge-Sort)算法
- 归并排序(merge sort)算法实现
- 归并排序(merge sort)的一个基于模板的实现
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
- Java排序算法(三)--归并排序(MergeSort)递归与非递归的实现