《算法导论》排序算法
来源:互联网 发布:caffe pdf 编辑:程序博客网 时间:2024/05/21 07:06
看《算法导论》写的部分代码,做个记录。
#include <iostream>#include <cmath>#include <vector>#define maxNumber 100000000;/*------------------------------------------------------------------------*《算法导论》第2-7章涉及到的部分算法:* 插入排序+合并排序+堆排序+快速排序*Version1.0: 2013/04/27*Version2.0目标:1.增加其他排序算法:冒泡排序+计数排序等* 2.增加更多类型支持,不限于std::vector<int>*------------------------------------------------------------------------*///------------插入排序算法-----------------void InsertionSort(std::vector<int> &A){int len = A.size();int i;for (int j=1;j<len;++j){int key = A[j];i = j-1;while (i>=0 && A[i]>key){A[i+1] = A[i];--i;}A[i+1] = key;}};//------------合并排序---------------------void Merge(std::vector<int> &A, int p, int q, int r){int n1 = q-p+1;int n2 = r-q;std::vector<int> L(n1+1);std::vector<int> R(n2+1);int i,j;for ( i=0; i<n1; ++i) L[i]=A[p+i];for ( j=0; j<n2; ++j) R[j]=A[q+j+1];L[n1] = maxNumber;R[n2] = maxNumber;i = 0;j = 0;for (int k =p; k<=r;++k){if (L[i]<=R[j]){A[k]=L[i];++i;}else{A[k] = R[j];++j;}}};void MergeSort(std::vector<int> &A, int p, int r){int q;if (p<r){q = (int)floor(double((p+r)/2));MergeSort(A,p,q);MergeSort(A,q+1,r);Merge(A,p,q,r);}};//------------堆排序--------------------------int LEFT(int i){return (2*(i)+1); //与书中不同,C++从0开始};int RIGHT(int i){return (2*(i)+2);};void MaxHeapify(std::vector<int> &A, int i,int heap_size){int l = LEFT(i);int r = RIGHT(i);int largest;if (l<heap_size && A[l]>A[i]) largest = l;else largest = i;if (r<heap_size && A[r]>A[largest]) largest = r;if (largest != i){std::swap(A[i],A[largest]);MaxHeapify(A, largest, heap_size);}};void BuildMaxHeap(std::vector<int> &A){int heap_size = A.size();for (int i = (int)floor(double(A.size()/2)); i>=0; --i)MaxHeapify(A,i,heap_size);}void HeapSort(std::vector<int> &A){BuildMaxHeap(A);int heap_size = A.size(); //???for (int i = A.size()-1;i>=1;--i){std::swap(A[0],A[i]);heap_size = heap_size-1;MaxHeapify(A,0,heap_size);}}//------------快速排序-----------------------------int Partition(std::vector<int> &A, int p, int r){int x = A[r];int i = p-1;for (int j=p;j<r;++j){if (A[j]<=x){++i;std::swap(A[i],A[j]);}}std::swap(A[i+1],A[r]);return i+1;};void QuickSort(std::vector<int> &A, int p, int r){if (p<r){int q = Partition(A,p,r);QuickSort(A,p,q-1);QuickSort(A,q+1,r);}};
- 《算法导论》排序算法
- 《算法导论》排序算法
- 算法导论:插入排序
- 算法导论 堆排序
- 算法导论 计数排序
- 【算法导论】拓扑排序
- 【算法导论】拓扑排序
- 【算法导论】计数排序
- 算法导论--堆排序
- 算法导论:排序
- 算法导论-快速排序
- 【算法导论】 堆排序
- 插入排序【算法导论】
- 【算法导论】归并排序
- 【算法导论】快速排序
- [算法导论]归并排序
- 【算法导论笔记】排序
- 算法导论-----插入排序
- CentOS 6.3+apache+nginx+mysql+php环境配置
- CentOS6.4系统中Mysql数据库卸载、安装与配置教程
- 终于调通了SSH.
- 软件设计模式系列之四 门面模式(也叫外观模式,Facade) .
- CentOS杂记
- 《算法导论》排序算法
- CentOS 安装 Apache 后其他机器无法访问的解决方法
- CentOS apache配置虚拟服务器
- CI笔记
- VC随笔文档视图结构
- TP笔记
- 遍历目录(递归)
- inpub 不能复制粘贴
- Windows 8 多版本操作系统