虽然久闻大名,但第一次接触算法导论,是看了网易公开课MIT的《算法导论》课,记得 第一集就讲到了 插入排序和归并排序。
几个星期前也买了算法导论这本书,准备慢慢啃~
这星期主要在看前两 部分,除了对于讲渐进时间、递归式分析这些东西感到云里雾里的,其它的都就
感觉越看越有觉得入 迷,果然不愧是一本经典之作
好吧,开始。本文主要是用C++把书中的算法实现,以及一些笔记。
一、插入排序。
插入算法的设计使用的是增量(incremental)方法:在排好子数组A[1..j- 1]后,将
元素A[ j]查入,形成排好序的子数组A[1..j]
插入排序的效率为O(n^2),在数据 规模较小的时候效率较高。
最佳的情况是一个数组已经是排好序的,只需O(n)。最坏情况是输入数 据是逆序的, O(n^2)。 对于一个算法,一般是考察它的最坏情况运行时间
伪代码:这里需要注意 的是由于大部分编程语言的数组都是从0开始算起,而伪代码是从1开始的
C++实现:
template <typename T> void insert_sort(T *begin, T *end){ // 采用了更接近C++ STL sort的调用方式 T *p,*t,key; for(p=begin+1; p!=end; ++p){ // 把A[j]插入排好序的A[1...j-1]中 key = *p; t=p-1; while(t>=begin && *t>key){ *(t+1) = *t; --t; } *(t+1) = key; } }
二、冒泡排序、选择排序、交换排序。
记得曾在刘汝佳的《算法竞赛入门经典》中看到一 段代码,书上说是冒泡排序,但是却和冒泡排序的过程有点不一样。一直到最近才知道,
原来那个应 该算作是交换排序。
选择排序伪代码:
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 算法
, 数组
, 递归
, 排序
, key
, 排序算法
, 算法导论
, 计算机科学导论
, c++ 选择排序
, 排序 编程 c++
, 算法导论习题堆排序
, c++排序算法
c++插入排序
算法导论 快速排序、归并排序 算法导论、算法导论 堆排序、堆排序 java 算法导论、算法导论第一章答案,以便于您获取更多的相关知识。