排序——归并排序(递归实现+迭代实现 )
2018-06-17 22:25:19来源:未知 阅读 ()
递归实现
//归并排序 递归实现 #include <iostream> using namespace std; #define MAXSIZE 10 // 实现归并,并把最后的结果存放到 list1里 void merging(int *list1, int list1_size , int *list2, int list2_size) { int i , j ,k ,m ; int temp[MAXSIZE]; i = j = k = 0; while( i < list1_size && j < list2_size ) { if( list1[i] < list2[j] ) { temp[k++] = list1[i++]; } else { temp[k++] = list2[j++]; } } while( i < list1_size ) { temp[k++] = list1[i++]; } while( i < list2_size ) { temp[k++] = list2[j++]; } for( m=0; m < (list1_size + list2_size); m++ ) { list1[m] = temp[m]; } } void MergeSort( int k[], int n ) { if( n > 1) { int *list1 = k; int list1_size = n/2; int *list2 = k + n/2; int list2_size = n - list1_size; MergeSort(list1, list1_size); MergeSort(list2, list2_size); merging(list1, list1_size , list2, list2_size);//归并 } } int main() { int i ,a[10] = {5,2,6,0,3,9,1,7,4,8}; MergeSort(a,10); for( i=0; i < 10 ;i++ ) { cout << a[i]; } cout << endl; return 0; }
迭代实现
//归并排序 迭代实现 #include <iostream> #include <stdlib.h> using namespace std; #define MAXSIZE 10 void MergeSort( int k[], int n ) { int i, left_min, left_max, right_min, right_max; int *temp = (int *)malloc(n * sizeof(int)); for( i=1; i < n; i*=2 )//步长 { for( left_min=0; left_min < n-i; left_min = right_max ) { right_min = left_max = left_min + i ; right_max = left_max + i; if( right_max > n ) //不能大于元素的个数 { right_max = n; } int next = 0; while( left_min < left_max && right_min < right_max) { if( k[left_min] < k[right_min] ) { temp[next++] = k[left_min++]; } else { temp[next++] = k[right_min++]; } } while( left_min < left_max ) //如果Lmin 没有走到LMAX的位置 说明L还有元素 { k[--right_min] = k[--left_min]; //把L的元素放在R的头部位置 } while( next > 0 ) { k[--right_min] = temp[--next]; //把整个数组还原到 刚刚剩下那个最大元素的后面 } } } } int main() { int i ,a[10] = {5,2,6,0,3,9,1,7,4,8}; MergeSort(a,10); for( i=0; i < 10 ;i++ ) { cout << a[i]; } cout << endl; return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:P1631 序列合并
下一篇:P1334 瑞瑞的木板
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- 排序汇总 2020-05-05
- 二叉排序树 2020-05-02
- 排序算法之快速排序代码c++ 2020-04-01
- tmp 2020-04-01
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash