目录 第1章环境搭建1 1.1Microsoft Visual C++2010学习版使用1 1.1.1Visual C++2010学习版安装2 1.1.2创建、编辑、编译和运行项目4 1.1.3为什么缺少很多选项8 1.1.4为什么一闪而过9 1.1.5其他配置选项10 1.2Code::Blocks的使用14 1.2.1安装Code::Blocks14 1.2.2创建项目和编辑源代码16 1.2.3调试20 第2章排序算法23 2.1冒泡排序24 2.1.1冒泡排序的基本思想24 2.1.2冒泡排序过程分析24 2.1.3冒泡排序代码分析26 2.2选择排序28 2.2.1选择排序的基本思想28 2.2.2选择排序过程分析28 2.2.3选择排序代码分析30 2.3插入排序31 2.3.1插入排序的基本思想31 2.3.2插入排序过程分析32 2.3.3插入排序代码分析33 2.4计数排序35 2.4.1计数排序的基本思想35 2.4.2计数排序过程分析35 2.4.3计数排序代码分析37 2.4.4统计句子中字母出现次数39 第3章递归算法42 3.1汉诺塔问题42 3.1.1汉诺塔问题解题思路分析42 3.1.2汉诺塔问题代码分析44 3.2全排列问题45 3.2.1无重复元素的全排列46 3.2.2有重复元素的全排列48 3.3因数分解问题50 3.3.1因子递增方式递归求解51 3.3.2子问题分解方式递归求解52 3.3.3分解因数问题代码分析52 3.4分形图形54 3.4.1盒分形思路分析54 3.4.2盒分形代码分析55 第4章数论基础58 4.1余数和最大公约数58 4.1.1余数58 4.1.2最大公约数61 4.1.3欧几里得算法61 4.2素数问题62 4.2.1素数的概念63 4.2.2素数相关的定理63 4.2.3筛选法求素数64 4.3同余问题71 4.3.1同余及其性质71 4.3.2线性同余72 第5章组合数学基础90 5.1排列生成算法90 5.1.1序数生成法91 5.1.2字典序生成法94 5.1.3“火星人”问题95 5.2组合生成算法97 5.2.1基于字典序的组合生成算法98 5.2.2基于格雷码的组合生成算法102第6章贪心算法111 6.1结构体111 6.2贪心算法概述113 6.3活动时间安排114 6.3.1活动安排过程分析115 6.3.2活动安排代码分析117 6.4最优装载问题119 6.4.1最优装载问题过程分析119 6.4.2最优装载问题代码分析120 6.5可切割背包问题122 6.5.1可切割背包问题分析122 6.5.2可切割背包代码分析124 6.6删数问题126 6.7操作系统内存分配128 6.7.1First Fit内存分配130 6.7.2Best Fit内存分配131 6.7.3Worst Fit内存分配133 第7章分治算法135 7.1快速排序136 7.1.1快速排序过程分析136 7.1.2快速排序代码分析138 7.2归并排序139 7.2.1归并排序过程分析140 7.2.2归并排序代码分析140 7.3二分查找142 7.3.1二分查找过程分析142 7.3.2二分查找代码分析143 7.4循环赛145 7.4.12k循环赛日程表145 7.4.2奇偶循环赛日程表149 7.5大整数乘法153 7.5.1大整数乘法过程分析154 7.5.2大整数乘法代码分析155 第8章动态规划算法159 8.1数字三角形159 8.1.1使用朴素递归求解数字三角形问题160 8.1.2使用动态规划算法求解数字三角形问题161 8.2最长公共子序列168 8.2.1最长公共子序列问题过程分析168 8.2.2最长公共子序列问题代码分析169 8.3编辑距离172 8.3.1编辑距离的正向生成172 8.3.2操作序列的逆向回溯174 8.401背包问题(一)178 8.4.101背包问题过程分析179 8.4.201背包问题代码分析180 8.5石子合并183 8.5.1石子合并问题过程分析184 8.5.2石子合并问题代码分析185 第9章回溯算法193 9.1八皇后问题193 9.1.1八皇后问题过程分析193 9.1.2八皇后问题代码分析195 9.2子集和问题198 9.2.1子集和问题过程分析198 9.2.2子集和问题代码分析199 9.301背包问题(二)202 9.3.101背包问题过程分析202 9.3.201背包问题代码分析204 9.4装载问题206 9.4.1装载问题过程分析206 9.4.2装载问题代码分析207 9.5任务分配问题209 9.5.1任务分配问题过程分析209 9.5.2任务分配问题代码分析210 参考文献213