【Data_Structure笔记6】排序算法之【二路归并排序】
来源:互联网 发布:虚与委蛇 知乎 编辑:程序博客网 时间:2024/05/21 14:02
/************************************************************************************************************************文件说明: 二路归并排序*************************************************************************************************************************/#include<iostream>#include<string>#include<string.h>using namespace std;/************************************************************************************************************************函数说明: 【1】Merge()函数的功能是将前后相邻的【两个有序表】归并为一个有序表的算法。【2】该两段有序表A[Low....Mid]、A[Mid+1......High]存放在同一顺序表中相邻的位置上,先将它们复制到【辅助数组B中】。 每次从B中的两个段取出一个记录进行关键字的比较,将较小的关键字放入A中。【3】当数组B中有一段超过其表长时,将另一段中的剩余部分直接复制到A中。*************************************************************************************************************************/template<typename ElemType>void MergeArray(ElemType arrayT[], int iLow, int iMid, int iHigh, ElemType pTempArray[]){ //【1】序列表的前后两端各自有序,将它们合并成一个有序的列表int i = iLow;int j = iMid + 1;int k = 0;while (i<=iMid&&j<=iHigh) {if (arrayT[i]<= arrayT[j]) //【2】比较序列表前后两端中的元素{pTempArray[k++] = arrayT[i++]; //【3】将较小的值复制到辅助数组pTempArray}else{pTempArray[k++] = arrayT[j++];}}//whilewhile(i<=iMid) //【4】若第一个表未检测完,复制{pTempArray[k++] = arrayT[i++];}while(j<=iHigh) //【5】若第二个表未检测完,复制{pTempArray[k++] = arrayT[j++];}for (i=0;i<k;i++) //【6】将排好序的序列复制到原始序列中,则原始序列为本次排序之后的结果{arrayT[iLow + i] = pTempArray[i];}}template<typename ElemType>void MergeSort(ElemType arrayT[], int iLow, int iHigh, ElemType pTempArray[]){if (iLow<iHigh){int iMid = (iLow + iHigh) / 2; //【1】从中间划分为两个子序列MergeSort<int>(arrayT, iLow, iMid, pTempArray); //【2】对左侧的子序列进行递归排序MergeSort<int>(arrayT, iMid + 1, iHigh, pTempArray); //【3】对右侧的子序列进行递归排序MergeArray<int>(arrayT, iLow, iMid, iHigh, pTempArray); //【4】最终,将两个有序序列合并起来}}/************************************************************************************************************************模块说明: 控制台应用程序的入口点*************************************************************************************************************************/int main(int argc,char* argv[]){int arrayT[15] = {22,32,44,34,56,21,24,345,213,234,245,127,113,119,933};int* pTempArray = (int*)std::malloc(15*sizeof(int)); //【1】定义一个辅助数组Bmemset(pTempArray,0,(15*sizeof(int)));MergeSort<int>(arrayT,0,14,pTempArray);std::cout<<"===================================================="<<std::endl;for(int i=0;i<15;i++){std::cout<<pTempArray[i]<<std::endl;}std::system("pause");return 0;}
阅读全文
0 0
- 【Data_Structure笔记6】排序算法之【二路归并排序】
- 【Data_Structure笔记8】排序算法之【选择排序---堆排序】
- 【Data_Structure笔记4】排序算法之【交换类排序】
- 【Data_Structure笔记5】排序算法之【选择类排序】
- 【Data_Structure笔记7】排序算法之【链式基数排序】
- 【Data_Structure笔记14】【笔试】之【所有排序算法】
- 排序算法之二路归并排序
- 排序算法之二路归并排序
- 排序算法之二路归并排序
- 排序算法之二路归并排序
- 【Data_Structure笔记3】排序算法之插入排序常见的三种算法
- 经典算法之二路归并排序
- 排序算法二之快速 归并排序
- 算法笔记之归并排序
- 二路归并排序算法
- 二路归并排序算法
- 二路归并排序算法
- Linux C学习笔记-排序算法6-二路归并排序
- 01.Spring Cloud学习笔记之使用IDEA+Spring Boot快速构建Rest服务
- sizeof是函数吗,具体使用方法
- 做了一个淘宝内部优惠券分享平台支持微信公众号以及网站
- 第K大的数
- leetcode 8. String to Integer (atoi)
- 【Data_Structure笔记6】排序算法之【二路归并排序】
- (3)servlet单例问题、load-on-startup、ServletConfig
- JVM调优总结
- HDU3874
- extern的总结
- 浅谈数据治理
- Demo_JDBC_CRUD(在MyEcilpse中对MySQL的数据进行增删改查)
- bzoj 2286 虚树
- Java实现发送手机验证码