归并排序
来源:互联网 发布:微单哪款好 最好知乎 编辑:程序博客网 时间:2024/06/06 05:32
基本原理如上图,其中图C中的temp指向一个长度和红色竖线左边数组长度相等的辅助数组作为合并操作的辅助buffer,
#include <iostream>#include <cstdio>#include <cmath>#include <ctime>using namespace std ; int* array = NULL ; void get_rand_num(int ** parray , int len)//生成一个随机数组{srand((unsigned int )time(NULL)) ; //下种子*parray = new int[len] ; for(int i = 0 ; i < len ; i++){(*parray)[i] = rand() % len ; }}void merge_sort(int * _array , int len ) {if(len <= 1) return;//递归基int *pleft = _array;int *pright = _array + len / 2 ; merge_sort(_array , len / 2 );//递归排序前半部分数组merge_sort(_array + len / 2 , len - len / 2 ) ;//递归排序后半部分数组//合并int *temp = new int[ len / 2] ;for(int i = 0 ; i < len / 2 ; i++ ) {temp[ i ] = pleft[ i ] ;}int left = 0 , right = 0 , i = 0 ; while(left < len /2 && right < len - len / 2){if(temp[ left] < pright[ right ] ){ pleft[ i ]= temp[ left ] ; left++ ; } else{pleft[ i ]= pright[ right ] ; right++ ; }i++ ; }if(left <len / 2 )for(int j = left ; j < len / 2 ; j++){ pleft[ i ] = temp[left] ; i++ ; } if(right < len - len / 2)for(int j = right ; j < len - len / 2 ; j++){ pleft[ i ] = pright[ j ] ; i++ ; }delete[ ]temp ; return ; }int main(int argc , char** argv){int len = 50 ; get_rand_num(&array , len) ; cout<<"before sort"<<endl ; for(int i = 0 ; i < 50 ; i++){cout<<"array["<<i<<"]="<<array[i]<<endl ; }merge_sort(array , len) ; cout<<"after sorting"<<endl;for(int i = 0 ; i < 50 ; i++){cout<<"array["<<i<<"]="<<array[i]<<endl ; }system("pause") ; delete[ ]array ; array = NULL ; return 0 ;}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 反向AJAX
- 轻量级HTTP服务器Nginx(常用配置实例)
- 真机iOS SDK升级后xcode不能进行真机调试 怎么办
- InputStream与OutputStream的比较
- 设置scrollView滚动到指定位置
- 归并排序
- js本地存储解决方案(localStorage与userData)
- 递归 - 算法学习
- java获取系统属性
- 五个最佳的编程文本编辑器
- 纠结了一晚上,关于CSS中Position属性
- 项目开发定时功能的实现
- 机器学习实战——预测数值型数据:回归
- CPC/CPM/CPA/CPS分别代表什么意思