准备写个<STL 源代码剖析>的读书笔记,开个专栏.名为<STL 的实现>,将源代码整理一遍.非常喜欢侯捷先生写在封底的八个字:天下大事.必作于细.他在书中写到:"我开玩笑地对朋友说,这本书出版,给大学课程中的「数据结构」和「算法」两门授课老师出了个难题.差点儿全部可能的作业题目(复杂度证明题除外),本书都有了详尽的解答. 然而,假设学生可以从庞大的SGI STL源代码中干净抽出某一部份,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分.其实.追踪一流作品并…
插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待插入元素(待排序列),将该元素后移一个位置: (4)重复步骤3,直到找到“有序序列”中某一元素小于或等于“待插入元素”的位置: (5)将待插入元素插入到该元素(有序序列)后面(i+1)的位置上; (6)重复步骤2~5,直到待排序列中没有元素. 例子实现步骤图: 最优时间复杂度:O(n) 最坏时间复杂…
最简单的排序算法,又称插值排序,原理类似于打扑克牌时把摸到的牌插入手中已有序牌的过程. void insertion_sort(int* A ,int n){ int i,j,key; ;i < n;i++){ key = A[i]; j = i - ; && A[j] > key){ A[j+] = A[j]; j--; } A[j+] = key; } }…
def insert_sort(old): for i in range(1, len(old)): for j in range(i, 0, -1): if(old[j] < old[j-1]): tmp = old[j] old[j] = old[j-1] old[j-1] = tmp # test case old = [2, 5, 3, 0, 2, 3, 0, 3] insert_sort(old) print old 插入排序的时间复杂度O(N^2)…
目录 1. for版本--插入排序 2. while版本--插入排序 3. 测试用例 4. 算法时间复杂度分析 1. for版本--插入排序 def insert_sort_for(a_list): '''插入排序for版本''' num = len(a_list) for j in range(1,num): for i in range(j,0,-1): if a_list[i] < a_list[i-1]: a_list[i-1],a_list[i] = a_list[i],a_list[…
插入排序( Insert sort) 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入: 由于不需要全部都比较完,所以排序速度优于冒泡和选择排序. #插入排序就像是斗地主摸牌 1.算法描述: 从第一个元素开始,该元素可以认为已经被排序: 取出下一个元素,在已经排序的元素序列中从后向前扫描: 如果该元素(已排序)大于新元素,将该元素移到下一位置: 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置: 将新元素插入到该位置后: 重复步骤2~5. 2.算法属性:…
直接插入排序的算法思路: (1) 设置监视哨r[0],将待插入纪录的值赋值给r[0]: (2) 设置开始查找的位置j: (3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止: (4) 将r[0]插入r[j+1]的位置上.       def insert_sort(l): for i in range(len(l)): min_index = i for j in range(i+1,len(l)): if l[min_index] > l[j]: min…
这篇博文用来介绍直接插入排序 直接插入排序基本思想: 每次将一个待排序的记录插入到已经排好序的数据区中,直到全部插入完为止 直接插入排序算法思路: 在直接插入排序中,数据元素分为了有序区和无序区两个部分,在这里我们将列表左边部分作为有序区,列表右边部分作为无序区,有序区和无序区的大小是随着排序的进行而变化的. 如最开始列表是无序的,所以有序区长度为1,无序区长度为列表长度-1,排序结束后,列表变为有序,则有序区长度为列表长度,无序区长度为0. 具体步骤为: 排序过程中每次从无序区中取出第一个元素…
#-*- coding: UTF-8 -*- import numpy as np def InsertSort(a): for i in xrange(1,a.size): for j in xrange(i,0, -1): if a[j-1] > a[j]: a[j-1] , a[j] = a[j], a[j-1] else: break if __name__ == '__main__': a = np.random.randint(0, 10, size = 10) print "…
是打扑克的时候了 那种按大小排序的扑克游戏 def insert_sort(arr): for i in range(1,len(arr)): for j in range(i,0,-1): #与左边已排序的数字中最近的arr[i-1]开始比较,到arr[0];每次步长为-1 if a[j]<a[j-1]: a[j-1],a[j]=a[j],a[j-1] return arr…