插入排序,选择排序,递归排序和冒泡排序的实现
2014-11-16 11:24
393 查看
以下是根据算法导论中伪码实现的几种排序方式,包括插入排序,选择排序,递归排序和冒泡排序。
<pre name="code" class="cpp">#include <iostream> using std::cout; // the insertion sort void 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 sort void 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 sort void 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 sort void 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"); }
相关文章推荐
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- 冒泡排序、选择排序、插入排序的js实现
- C语言实现选择排序、直接插入排序、冒泡排序的示例
- java插入排序,冒泡排序,选择排序的思路及实现
- Java基本排序实现--插入排序,选择排序,冒泡排序
- 编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序
- 冒泡排序、选择排序、直接插入排序(java实现)
- 快速排序,选择排序,直接插入,冒泡排序的javascript实现
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 基础排序——冒泡排序、选择排序、插入排序的讲解、代码实现
- 插入排序,选择排序,冒泡排序等常用排序算法(java实现)
- #.java实现排序算法:插入排序、选择排序、冒泡排序
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 菜鸟学编程之三:三种最基本排序算法的实现(冒泡排序、选择排序、直接插入排序)
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 计数排序、选择排序、冒泡排序、插入排序的实现以及它们的比较次数和移动次数
- java实现冒泡排序,选择排序,直接插入排序,快速排序
- 冒泡排序, 简单选择排序, 插入排序, 希尔排序, 快速排序 js 实现