博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法概论】分治算法:归并排序
阅读量:4177 次
发布时间:2019-05-26

本文共 1319 字,大约阅读时间需要 4 分钟。

#include 
using namespace std;void mergeSort(int data[], int head, int tail); void merge(int data[], int head, int mid, int tail);int main(){ int data[4] = { 7, 5, 6, 4 }; int len = 4; mergeSort(data, 0, len - 1); for (int i = 0; i < 4; ++i) { cout << data[i] << ' '; } cout << endl; return 0;}void mergeSort(int data[], int head, int tail){ if (head < tail) { int mid = (head + tail) / 2; mergeSort(data, head, mid); mergeSort(data, mid + 1, tail); merge(data, head, mid, tail); } return;}void merge(int data[], int head, int mid, int tail){ //len1和len2分别表示左边序列和右边序列的长度 int len1 = mid - head + 1; int len2 = tail - mid; int *L = new int[len1]; int *R = new int[len2]; //分别给数组L和R赋值 for (int i = 0, m = head; i < len1; ++i, ++m) { L[i] = data[m]; } for (int j = 0, n = mid + 1; j < len2; ++j, ++n) { R[j] = data[n]; } //比较大小,从小到大排列 int i = 0, j = 0, k = head; for ( ; i < len1 && j < len2; ++k) //i和j分别指向数组L和R的下标,k为指向数组data的下标 { if (L[i] > R[j]) { data[k] = R[i]; ++j; } else if (L[i] < R[j]) { data[k] = L[i]; ++i; } else { data[k] = L[i]; i += 1; k += 1; data[k] = R[j]; j += 1; } } //将剩下的元素存入data中 if (i == len1) { while (j < len2) { data[k++] = R[j++]; } } if (j == len2) { while (i < len1) { data[k++] = L[i++]; } } delete L; //new的空间最后记得delete掉! delete R; return;}

 

转载地址:http://wttai.baihongyu.com/

你可能感兴趣的文章
推荐一本挺好的Android书籍
查看>>
Android EditText和Button控件搭配如何更好看些
查看>>
Android相对布局
查看>>
Android - 自定义标题栏
查看>>
Android ListView 动态添加一行数据
查看>>
MFC 查找文件夹内指定后缀的文件名
查看>>
论选书的重要性
查看>>
单片机跑马灯代码示例
查看>>
Vivo 手机升级最新系统,Android Studio不能再调试,报The application could not be installed: INSTALL_FAILED_TEST_ONLY
查看>>
74HC595串转并模块使用代码例子 (并口接交通灯)
查看>>
74 HC595 级联控制16 * 16显示屏
查看>>
MFC ListCtrl增加了item,却没有显示
查看>>
ListCtrl插入大量数据时,发现缓慢有问题,QT里有数据和显示分开,MFC也有比较戳的虚拟表,古老的技术
查看>>
MFC如何复制多个文件到剪贴板
查看>>
MFC 高精度计时器
查看>>
大量调用函数,里CImage局部变量 并使用Load函数,会导致大量的线程退出现象解决办法
查看>>
线程的优先级应用场景 - 算法分析计算时间
查看>>
MFC ListCtrl 设置某行没效果解决办法
查看>>
MFC自定义搜索编辑框CEdit,得到焦点提示文本消失,失去焦点,提示文本显示
查看>>
MFC 复制文本到剪贴板
查看>>