插入排序,选择排序,递归排序和冒泡排序的实现
来源:互联网 发布:笔趣阁 知乎 编辑:程序博客网 时间:2024/06/08 00:43
以下是根据算法导论中伪码实现的几种排序方式,包括插入排序,选择排序,递归排序和冒泡排序。
<pre name="code" class="cpp">#include <iostream>using std::cout;// the insertion sortvoid Insertion_sort(double* t_dpSeq,unsigned long t_ulSeqLen){double dKey;long lIndex;for (unsigned long ulTemp = 1; ulTemp < t_ulSeqLen; ulTemp++){dKey = t_dpSeq[ulTemp];lIndex = ulTemp - 1;while (lIndex >= 0 && t_dpSeq[lIndex] > dKey){t_dpSeq[lIndex + 1] = t_dpSeq[lIndex];lIndex--;}t_dpSeq[lIndex + 1] = dKey;}}// the choose sortvoid Choose_sort(double* t_dpSeq, unsigned long t_ulSeqLen){double dMin;long lPos;for (unsigned long ulTemp = 0; ulTemp < t_ulSeqLen - 1; ulTemp++){dMin = t_dpSeq[ulTemp];lPos = ulTemp;for (unsigned long ulIndex = ulTemp + 1; ulIndex < t_ulSeqLen; ulIndex++){if (t_dpSeq[ulIndex] < dMin){dMin = t_dpSeq[ulIndex];lPos = ulIndex;}}t_dpSeq[lPos] = t_dpSeq[ulTemp];t_dpSeq[ulTemp] = dMin;}}// the merge sortvoid Merge(double* t_dpSeq, unsigned long t_ulBegin, unsigned long t_ulMiddle, unsigned long t_ulEnd){unsigned long ulLen1, ulLen2, ulIndex1, ulIndex2;ulLen1 = t_ulMiddle - t_ulBegin + 1;ulLen2 = t_ulEnd - t_ulMiddle;double* dpUpSeq = new double[(ulLen1 + 1)*sizeof(double)];double* dpDownSeq = new double[(ulLen2 + 1)*sizeof(double)];for (unsigned long ulTemp = 0; ulTemp < ulLen1; ulTemp++){dpUpSeq[ulTemp] = t_dpSeq[t_ulBegin + ulTemp];}for (unsigned long ulTemp = 0; ulTemp < ulLen2; ulTemp++){dpDownSeq[ulTemp] = t_dpSeq[t_ulMiddle + ulTemp + 1];}dpUpSeq[ulLen1] = 1e10;dpDownSeq[ulLen2] = 1e10;ulIndex1 = 0;ulIndex2 = 0;for (unsigned long ulIndex = t_ulBegin; ulIndex <= t_ulEnd; ulIndex++){if (dpUpSeq[ulIndex1] <= dpDownSeq[ulIndex2]){t_dpSeq[ulIndex] = dpUpSeq[ulIndex1];ulIndex1++;}else{t_dpSeq[ulIndex] = dpDownSeq[ulIndex2];ulIndex2++;}}delete[]dpUpSeq;delete[]dpDownSeq;}void Merge_inner(double* t_dpSeq, unsigned long t_ulBegin, unsigned long t_ulEnd){unsigned long ulMiddle;if (t_ulBegin < t_ulEnd){ulMiddle = (t_ulBegin + t_ulEnd) / 2;Merge_inner(t_dpSeq, t_ulBegin, ulMiddle);Merge_inner(t_dpSeq, ulMiddle + 1, t_ulEnd);Merge(t_dpSeq, t_ulBegin, ulMiddle, t_ulEnd);}}void Merge_sort(double* t_dpSeq, unsigned long t_ulSeqLen){unsigned long ulBegin = 0, ulEnd = t_ulSeqLen - 1;Merge_inner(t_dpSeq, ulBegin, ulEnd);}// the bubble sortvoid Bubble_sort(double* t_dpSeq, unsigned long t_ulSeqLen){double dTemp;for (unsigned long ulTemp = 0; ulTemp < t_ulSeqLen - 1; ulTemp++){for (unsigned long ulIndex = t_ulSeqLen - 1; ulIndex > ulTemp; ulIndex--){if (t_dpSeq[ulIndex] < t_dpSeq[ulIndex - 1]){dTemp = t_dpSeq[ulIndex];t_dpSeq[ulIndex] = t_dpSeq[ulIndex - 1];t_dpSeq[ulIndex - 1] = dTemp;}}}}int main(){double dSeq[10] = { 11, 33, 20, 9, 80, 22, 31, 49, 78, 96 };unsigned long ulSeqLen = 10;//Insertion_sort(dSeq, ulSeqLen);//Choose_sort(dSeq, ulSeqLen);//Merge_sort(dSeq, ulSeqLen);Bubble_sort(dSeq, ulSeqLen);for (unsigned long ulTemp = 0; ulTemp < ulSeqLen; ulTemp++){cout << dSeq[ulTemp] << " ";}system("pause");}
0 0
- 插入排序,选择排序,递归排序和冒泡排序的实现
- 冒泡排序、选择排序和插入排序的实现
- 冒泡排序 选择排序和插入排序
- 冒泡排序、插入排序和选择排序
- 冒泡排序和插入排序,选择排序
- 冒泡排序,插入排序和选择排序实现
- java选择排序、冒泡排序和插入排序实现
- 递归,汉诺塔,冒泡排序,选择排序,插入排序,快速排序
- 有关的插入排序、选择排序、快速排序和冒泡排序C++的实现
- 冒泡排序、选择排序、插入排序的js实现
- Java实现的简单排序(冒泡排序,选择排序和插入排序)
- 快速排序、插入排序、选择排序和冒泡排序的实现
- 简单排序算法:冒泡排序,选择排序和插入排序的c++实现
- 选择排序,冒泡排序和插入排序使用时间的对比
- 冒泡排序、插入排序和选择排序的总结
- 实现冒泡排序、插入排序、选择排序、shell排序
- 选择排序&插入排序&冒泡排序&快速排序算法实现
- java实现冒泡排序,插入排序,选择排序,快速排序
- 注解配置 ssh
- jQuery表格插件(隔行换色、划过变色、全选)
- 【初学】android笔记
- 如何实时查看linux下的日志
- 位运算之美--用 +、- 和位运算实现正整数除法和取模(2)
- 插入排序,选择排序,递归排序和冒泡排序的实现
- hdu 5107 K-short Problem(线段树)
- [C++]LeetCode: 17 Reverse Integer
- Spring-AMQP连接和资源管理
- 《数据结构》第三章 栈和队列 知识结构导图——信管1133-09
- Java 单例模式
- ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码
- jquery-easyui学习(2)_easyloader
- MFC控件的绘制与响应顺序——ZOrder