数组的归并排序(不使用辅助空间,递归)
来源:互联网 发布:年终奖数据表免费数据 编辑:程序博客网 时间:2024/04/28 13:07
void MergeSortCore(int* data, int first, int last);void RingShift(int* data, int begin, int mid, int end);void MergeSort(int* data, int length){if(data == NULL || length <= 0) return;MergeSortCore(data, 0, length-1);}void MergeSortCore(int* data, int first, int last){if(first == last) return;int mid = first + (last - first)/2;MergeSortCore(data, first, mid);MergeSortCore(data, mid+1, last);//循环不变式:data[first,i)有序;i < j;j <= lastint i = first, j = mid + 1, temp;while(i < j && j <= last){//移动iwhile(i < j){if(data[i] <= data[j]) i++;else break;}if(i == j) break;//移动jtemp = j;while(j <= last){if(data[j] < data[i]) j++;else break;}//循环移动[i,temp)与[temp,j)RingShift(data, i, temp, j);//移动ii += j - temp;}}void swap(int& a, int& b){int temp = a;a = b;b = temp;}//反转data[first,last]void reverse(int* data, int first, int last){if(data == NULL) return;while(first < last)swap(data[first++], data[last--]);}//data[begin,mid)和data[mid,end)两部分交换位置void RingShift(int* data, int begin, int mid, int end){if(data == NULL) return;reverse(data,begin,mid-1);reverse(data,mid,end-1);reverse(data,begin,end-1);}
0 0
- 数组的归并排序(不使用辅助空间,递归)
- 数组的归并排序(不使用辅助空间,循环)
- 数组的归并排序(经典实现:使用Ο(n)的辅助空间,递归)
- 数组的归并排序(使用Ο(n)的辅助空间,循环)
- 归并排序(O(n)辅助空间)与原地递归排序(O(1)辅助空间)
- 不使用“哨兵“位的递归-归并排序C++源代码
- 不使用递归实现归并排序
- C++实现归并排序Mergesort(使用递归的方法)
- 数组的快速排序(递归,需要隐性栈空间)
- 递归的归并排序
- 归并排序(递归)
- 归并排序(递归)
- 合并排序(归并排序)的递归和非递归
- 非递归的归并排序(MergeSort)
- 交换两个子数组的位置(只使用1个辅助空间)
- 数组的归并排序
- 数组的归并排序
- 数组的归并排序
- Remove Duplicates from Sorted List II
- 计数排序、桶排序python实现
- hdu1002A + B Problem II
- 大家好,新人报道!
- Oracle性能优化2- 依据场景选择技术
- 数组的归并排序(不使用辅助空间,递归)
- Morris遍历
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- sql server 小数据插入,根据表名生成insert 语句,求加固
- HDU-#1166 敌兵布阵 (树状数组&线段树)
- Delphi列表视图组件(TListView)详解
- No configuration found for the specified action: '/sum' in namespace: ''.Form action defaulting to '
- Android核心基础二
- Android异步加载网络数据以及数据缓存的讲解、实例