排序算法整理(2)归并排序
来源:互联网 发布:女款羽绒服淘宝网购物 编辑:程序博客网 时间:2024/05/21 00:46
貌似需要整理一下排序算法了,正好最近在看的宋劲杉的《LINUX一站式编程》也提到了几个排序算法,于是决定把几个常见的排序算法都写写吧。
归并排序用到了分治(divide and conquer)的思想。
如果要排序当前的数组,那么只需要排序当前数组的前1/2和后1/2,然后把它们合并起来。如果要排序前1/2,那么只需要排序这个1/2数组的前1/2和这个1/2数组的1/2,再把它们合并起来。
不断拆分下去…
如果当前数组的元素个数为1了,那就没法再拆分下去了,于是开始归并。
//下面两个函数用来依次打印数组。功能一样,参数不一样,这是为了方便不同的数据类型的调用要求。
void print_num_1(uint32_t* arr, uint32_t len){ for(int i=0;i<len;i++) std::cout<<arr[i]<<"\t"; std::cout<<std::endl; return;}void print_num_2(int* arr, int len){ for(int i=0;i<len;i++) std::cout<<arr[i]<<"\t"; std::cout<<std::endl; return;}
下面是我的版本的mergesort, 和书上的版本基本上比较像,所以就写这一个版本了。
void merge_sort_1(uint32_t* arr, uint32_t st, uint32_t ed ){ uint32_t len_3=ed-st+1; uint32_t len_2=0; uint32_t len_1=0; uint32_t mid=0; uint32_t* arr2=new uint32_t[len_3]; if( st == ed ) { return; }else{ mid=(st+ed)/2; merge_sort_1(arr, st, mid); merge_sort_1(arr, mid+1, ed); len_3=ed-st+1; len_2=ed-mid; len_1=mid-st+1; uint32_t i=0; uint32_t j=st; uint32_t k=mid+1; while((j<mid+1)&&(k<ed+1)) //注意区分数组的下标的绝对长度和相对长度,ERROR: while((j<len_1)&&(k<len_2)) { if(arr[j]<=arr[k]){ arr2[i++]=arr[j++]; // std::cout<<"1 i="<<i<<",arr2[i]="<<arr2[i]<<std::endl; }else{ arr2[i++]=arr[k++]; // std::cout<<"2 i="<<i<<",arr2[i]="<<arr2[i]<<std::endl; } } while(j<mid+1) { arr2[i++]=arr[j++]; // std::cout<<"3 i="<<i<<",arr2[i]="<<arr2[2]<<std::endl; } while(k<ed+1) { arr2[i++]=arr[k++]; } for (int b=st,k=0;b<=ed;b++,k++) { arr[b]=arr2[k]; } delete [] arr2; return; } }
- 排序算法整理(2)归并排序
- 排序算法整理之归并排序
- java 排序算法整理の堆排序,归并排序
- 常见排序算法整理(三)----归并排序、快速排序
- 排序算法2-快速排序、归并排序
- 经典算法整理之归并排序
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 黑马程序员_网络编程1(IP,TCP和UDP,DatagramSocket与DatagramPacket,TCP传输)
- 史玉柱的创业经验谈
- hive数据类型(翻译自Hive Wiki)
- UVA 112 Tree Summing
- 增强视觉 | 计算机视觉 增强现实
- 排序算法整理(2)归并排序
- EOE上的LISTVIEW分组
- Linux操作系统主机名(hostname)简介
- 并行作业类型
- eclipse和myeclipse快捷键大全
- 解决sqllite的'unable to open database file'错误
- 2 Java学习之 集合框架
- Android内核剖析读书笔记(1)—Framework概述
- android中Bluetooth属性获取代码分析