归并排序
来源:互联网 发布:如何在淘宝提高销量 编辑:程序博客网 时间:2024/06/06 07:29
代码:
#include "stdafx.h"#include <iostream>#include <assert.h>using namespace std;//合并两个排好序的数组nArr[nStart, nMid]和nArr[nMid+1, nEnd]void Merge(int nArr[], int nStart, int nMid, int nEnd){ //申请一个长度相同的临时数组,元素初始化为0int *p_nTemp = new int[nEnd - nStart + 1];memset(p_nTemp, 0, (nEnd - nStart + 1) * sizeof(int));//设置两个游标指向两个子数组中的元素int nCur1 = nStart;int nCur2 = nMid + 1;int nTempIndex = nStart;//同时遍历两个子数组,依次放入临时数组中while ((nCur1 <= nMid) && (nCur2 <= nEnd)){if (nArr[nCur1] < nArr[nCur2]){p_nTemp[nTempIndex++] = nArr[nCur1++];}else{p_nTemp[nTempIndex++] = nArr[nCur2++];}}while (nCur1 <= nMid){p_nTemp[nTempIndex++] = nArr[nCur1++];}while (nCur2 <= nEnd){p_nTemp[nTempIndex++] = nArr[nCur2++];}//将临时数组中的元素赋值到原数组中for (int i=nStart; i<=nEnd; i++){nArr[i] = p_nTemp[i];}delete []p_nTemp;}//归并排序void MergeSort(int nArr[], int nStart, int nEnd){ assert(nArr != NULL && nStart >= 0 && nEnd >= 0); if (nStart < nEnd) {int nMid = (nStart + nEnd) >> 1;MergeSort(nArr, nStart, nMid);//对数组的前半部分进行归并排序MergeSort(nArr, nMid+1, nEnd);//对数组的后半部分进行归并排序 Merge(nArr, nStart, nMid, nEnd);//合并两个排好序的数组 }}int _tmain(int argc, _TCHAR* argv[]){int nArr[5] = {7,5,6,4,8}; MergeSort(nArr, 0, 4);for (int i=0; i<5; i++){cout << nArr[i] << " ";}cout << endl;system("pause");return 0;}
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- java中常用的时间处理类TimeUtil
- Unity3D 碰撞
- 2013年 天朝程序员薪资等级
- Interleaving String
- android圆角按钮的背景
- 归并排序
- 2012中国云实践之企业总评榜
- javascript loadjs
- linux文件权限详解
- 在Linux环境下使用 Putty软件中文乱码解决方法
- java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Integer
- Oracle 内存管理SGA
- xcode4.5 EXC_BAD_ACCESS调试
- [ oracle ] oracle之路2---truncate,delete,drop