非递归的归并排序
来源:互联网 发布:淘宝上的手办是真假 编辑:程序博客网 时间:2024/05/24 22:42
#include<cstring>#include<iostream>using namespace std;/*merge操作和递归的归并一样,就是数组链表两种方式都要熟悉!*/void merge(int a[], int left, int mid, int right, int tmp[]){ int i = left, j = mid+1,k = 0 ; while(i<=mid&&j<=right){ if(a[i]>a[j]) tmp[k++] = a[j++]; else tmp[k++] = a[i++]; } while(i<=mid) tmp[k++] = a[i++]; while(j<=right) tmp[k++] = a[j++]; for(i = 0 ; i < k ; i++) a[left+i] = tmp[i];}/*非递归的归并排序,就是先两个元素合并,然后四个、八个...*/void mergeSort(int a[], int length){ int size = 1, left, right, mid; //size 小组内每组个数,1.2.4.8.... int *tmp = new int[length]; //临时数组,在erge中使用,在merge中new会重复new,delete。优化 while(size <= length-1){ left = 0; while(left+size <= length-1){ mid = left+size-1; right = mid+size; if(right>length-1)//右部超出数组大小,将右面的数组截断到最后一个元素。 right = length-1; merge(a, left, mid, right, tmp); left = right+1; } size*=2; }}int main(){ int array[] = {2,5,1,-3,7,9,18,4,6}; mergeSort(array,9); for(int i = 0 ; i< 9 ; i++) cout<<array[i]<<" "; return 1;}
0 0
- 非递归的归并排序
- 非递归的归并排序
- 非递归的归并排序
- 归并排序 非递归
- 归并排序非递归
- 归并排序(非递归)
- 归并排序(非递归)
- 归并排序的非递归算法
- 归并排序的非递归实现
- 归并排序的非递归实现
- 非递归的归并排序(MergeSort)
- 归并排序的非递归实现
- 归并排序的非递归实现
- 归并排序的非递归实现
- 合并排序(归并排序)的递归和非递归
- 归并排序的递归实现与非递归实现
- 归并排序的递归和非递归方法总结
- 归并排序的递归实现与非递归实现
- poj1005
- SDL-1.2.13 SDL_mixer-1.2.8 测试程序
- lazy懒加载(延迟加载)UITableView
- K均值聚类——如何提高聚类的性能
- js 数组对象根据某一属性排序
- 非递归的归并排序
- [mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.
- MySQL体系结构
- 【微软100题】逆置链表
- MAC Intellij IDEA 常用快捷键(本人亲自测试过)
- 深圳联强私人订制淘宝托管公司好不好
- ZOJ 3822 Domination
- free()与release区别
- 一个MVC4 下的验证码用法