归并排序
来源:互联网 发布:webassembly 知乎 编辑:程序博客网 时间:2024/05/16 11:49
归并排序,复杂度O(nlgn)。
思路是每次将数组分成两部分,然后对各部分进行排序,通过合并(归并)操作将两段已经排序过的数组进行整合,形成新的排序数组的顺序。
void merge(vector<int>& nums, int left, int mid, int right){ vector<int> L(nums.begin() + left, nums.begin() + mid+1); vector<int> R(nums.begin() + mid + 1, nums.begin() + right+1); L.push_back(INT_MAX); R.push_back(INT_MAX); int i = 0; int j = 0; for (int k = left; k <= right; k++){ if (L[i] <= R[j]) nums[k] = L[i++]; else nums[k] = R[j++]; }}void merge_sort(vector<int>& nums, int left, int right){ if (left < right){ int mid = (left + right) / 2; merge_sort(nums, left, mid); merge_sort(nums, mid + 1, right); merge(nums, left, mid, right); }}int main(){ srand(time(0)); vector<int> nums(10); for (int i = 0; i < nums.size(); i++){ nums[i] = rand() % 20; } for (auto val : nums) cout << val << " "; cout << endl; merge_sort(nums, 0, nums.size() - 1); cout << "merge-sort: " << endl; for (auto val : nums) cout << val << " "; cout << endl; return 0;}
运行结果如图:
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 配置nginx好了,html能打开,index.php打不开?
- 启动mysql错误ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
- ZIP打包解包
- QT5.5.0版本添加icon图标步骤
- linux iminor imajor dev_t
- 归并排序
- linux centos6.5 ftp网页vsftpd配置
- Qt5.5.0使用mysql编写小软件源码讲解---顾客信息登记表
- macbook使用“终端”远程登录linux主机
- KEIL MDK STM32如何建立工程
- stm32 加入 USE_STDPERIPH_DRIVER、STM32F10X_HD的原因
- IOS Dev Intro - Blocks Programming Series 02
- java体系结构介绍-----项目编译到启动服务
- Flash Download Failed-"Cortex-M3"