算法
小杨树林
新的开始-记录工作中的所学所思所想
展开
-
选择排序
算法描述:每次都查找选择最大的数或者最小的数,找到之后放在最前面或者最后面 注意:通过数组下标进行比较,以便交换数的位置 这是在网上找到的图示: 附代码如下: #include<stdio.h> //选择排序:每次都找最小值,找到之后从前往后放,或者找最大值按照要求放置 void SelectSort(int arr[],int nLength) { if(arr ==...原创 2018-08-09 12:47:12 · 102 阅读 · 0 评论 -
插入排序
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法 这里我们实现的是最简单的直接插入:也就是将待排序的数组分成两部分,一部分是有序...原创 2018-08-09 12:58:56 · 148 阅读 · 0 评论 -
计数排序
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法, 计数排序的思想是:重新申请一个数组,新数组的大小是由原数组中最大值减去最小值加一得到的,然后将原数组中出现的数字次数存在新数组里,最后通过新数组进行排...原创 2018-08-09 13:17:34 · 108 阅读 · 0 评论 -
希尔排序(ShellSort)
希尔排序是插入排序的一种 即我们要将一个数组分割成多个组,然后我们在这个区间内使用插入排序,插入排序我们在这里就不做过多的介绍了 首先我们要知道这个组是怎么划分的,我们划分区间首先就要定步长 第一次的步长gap=length/2 第二次步长 gap=gap/2 直到gap<1时结束 所以我们将一个数组分成了gap个组,然后我们在这个组中排序 注意:我们划分的各中的元素是通过原...原创 2018-08-11 16:28:29 · 151 阅读 · 0 评论 -
快速排序———挖坑填补法
快排的基本思路: 首先将数组的第一个数字作为标准值;然后我们只需要找到该数组在排好序后的数组中的位置,在此位置之前的数字都比该数字小,在此位置之后的数字都比还数字大。 下面介绍一下怎么找到标准值的位置: 1 先将标准值保存,腾出标准值的位置,出坑(注 坑不是实际意义上的空间,而是我们假象的,只需要保存标准时即可) 2 从后面向前找到比标准值小的数字,放在坑里,这样又腾出一个位置 3 再从...原创 2018-08-11 16:02:14 · 1099 阅读 · 0 评论 -
堆排序
大根堆排序算法的基本操作: ①建堆,建堆是不断调整堆的过程,从len/2处开始调整,一直到第一个节点,此处len是堆中元素的个数。建堆的过程是线性的过程,从len/2到0处一直调用调整堆的过程,相当于o(h1)+o(h2)…+o(hlen/2) 其中h表示节点的深度,len/2表示节点的个数,这是一个求和的过程,结果是线性的O(n)。 ②调整堆:调整堆在构建堆的过程中会用到,而且在堆排序过程中...原创 2018-08-13 16:42:47 · 151 阅读 · 0 评论