归并排序(mergeSort) 与 分而治之策略(divide and conquer)
来源:互联网 发布:机关办公平台软件 编辑:程序博客网 时间:2024/06/07 18:01
1. 分治: (divide and conquer) 一个大的问题,可以分解为相似的子问题,每个相似的子问题都和原问题有一样的求解方法。可以将问题细化,直到子问题足够小能够求解,然后将子问题的解逐级合并,以最终求得原问题的解。
2. 归并排序算法的递归实现。
#include <stdio.h>#include <stdlib.h>#define max 100int tmp[max];void printArray(int* a, int len);void merge(int* a, int low, int mid, int high);void mergeSort(int *a, int low, int high);int main(int argc, char* argv[]){ int a[10] = {5, 4, 3, 2, 1, 3, 3, 3, 4, 0}; int len = 10; mergeSort(a, 0, len-1); printArray(a, len); return 0;}void printArray(int* a, int len) { int i; for(i=0; i<len; i++) { printf("%d\t", a[i]); } printf("\n");}void merge(int* a, int low, int mid, int high) { int i; int j; int k; for(i=low; i<=high; i++) { tmp[i] = a[i]; } j=low; k=mid+1; for(i=low; i<=high && j<=mid && k<=high; ) { if(tmp[j]<=tmp[k]) { a[i++] = tmp[j++]; }else{ a[i++] = tmp[k++]; } } while(j<=mid) a[i++] = tmp[j++]; while(k<=high) a[i++] = tmp[k++];}void mergeSort(int* a, int low, int high) { int mid; if(low<high) { mid = (low+high) >> 1; mergeSort(a, low, mid); mergeSort(a, mid+1, high); merge(a, low, mid, high); }}
以上参见《算法导论》的第二章。
- 归并排序(mergeSort) 与 分而治之策略(divide and conquer)
- Divide and Conquer&Count Inversions归并排序求逆序数
- 分治策略Divide and Conquer
- C++修炼笔记----------利用合并排序提升排序效率(分而治之---Divide-Conquer )
- 算法导论学习笔记之二--分而治之(divide-and-conquer approach)
- Scala 编程中分而治之的思想 (divide and conquer)
- 【Python排序搜索基本算法】之归并排序&分治法(Merge Sort and Divide & Conquer)
- 新鲜出炉 --分治排序 (Divide-and-conquer)
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 归并排序(Mergesort)
- 归并排序(MergeSort)
- 归并排序(mergeSort)
- 归并排序(MergeSort)
- 归并排序(mergesort)
- Divide & Conquer 分治策略
- java常见的ClassNotFoundException
- 模板的使用 二
- 系统架构--揭开J2EE集群的神秘面纱(四)
- vc循序渐进实现仿QQ界面(三):界面调色与控件自绘
- grails中令人费解的有关问题
- 归并排序(mergeSort) 与 分而治之策略(divide and conquer)
- kernel starting 内核引导失败常见解决办法
- 系统架构--揭开J2EE集群的神秘面纱(五)
- ssh中得常用配置
- linux碎碎念
- 系统架构--揭开J2EE集群的神秘面纱(六)
- 按字节截图字符串,防止出现半个中文
- 题目1
- vc循序渐进实现仿QQ界面(四):圆形按钮与工具栏自绘