C
细水长流-青山
成功与失败皆取决于思想的力量。
展开
-
十大基础排序 · 八 --- 计数排序
我也来写一篇排序的博客吧,看这个算法的有些博文推荐靠前但是写的有点乱,把自己的代码分享出来,让读者有更多的选择和思考; 虽然是个简单的小程序,若有更好的实现方法,欢迎交流探讨。 1. 简介 计数排序(CountSort) 时间复杂度: O(n) 空间复杂度:O(k) 适用场合: 数字在一定范围内,且分布密集或重复次数高; 分析: 1. 找到数组的最大最小值!(数字范围原创 2017-06-24 09:57:15 · 298 阅读 · 0 评论 -
查找算法系列(一):二分查找( 描述+代码)
1.分析1. 需要三个变量 1. nLow 2. nMid 3. nHigh2. 过程设待查数据为nFind, 数组为arr 如果 nFind > arr[nMid] nLow = nMid + 1; 否则 nHigh = nMid - 1;3. 时间复杂度: O(nlog^n)#include<stdio.h>原创 2017-07-23 10:02:38 · 612 阅读 · 1 评论 -
链表的快速排序 - 区间分割法
首先,回忆一下数组的快排步骤:函数参数: 数组arr, 起点nLow, 终点nHigh 功能: 把nLow 至 nHigh 段的数组进行一次快排。 结果:【比nMark小的元素】nMark【比nMark大的元素】#区间分割法 1. 取最后一个元素为标记,用nSmall标记小区间大小,i 用来遍历数组; 2. 遍历值小于标记值:小区间的下一个不是当前位置,需要交换原创 2017-08-08 15:25:30 · 533 阅读 · 0 评论 -
十大基础排序 · 四 --- 快速排序(不稳定)挖坑填补法+区间分割法+3种优化方法
1. 分析/*4. 快速排序(QuickSort) #平均时间复杂度: O(nlogn) #最坏时间复杂度:O(n2) (有序的情况) #空间复杂度:需要一个栈空间, 若每趟排序将记录均匀分割成两个相近的子序列,则栈的最大深度为 向下取整[logn]+1; 若偏向一边, 最坏情况,栈最大深度为n; 在一趟分割后比较分割后的长度,先对短序列排序,则栈最大深度为O(logn);原创 2017-07-22 16:33:10 · 1306 阅读 · 1 评论 -
十大基础排序 · 十 --- 基数排序(稳定)
1. 分析/*10.基数排序(RadixSort) #分析: 1. 分桶: 按照个位分桶 2. 把数据装入对应桶中;(尾添加) 3. 把数据倒回原数组 4. 再按照 十位分桶,重复2-3 5. 再按照 百位分桶,从复2-3 6. 直到最高位。例子: 原数组:23,653,121,53,110,15,482,663,35,336,57,3原创 2017-07-22 16:14:52 · 2247 阅读 · 0 评论 -
十大基础排序 · 七 --- 2-路归并(稳定)
1. 分析/*7. 2路-归并排序(MergeSort) #时间复杂度: O(nlogn); 空间复杂度:O(n)//实现归并排序需和待排记录等数量的辅助空间;#分析: 1. 先分解左边,再分解右边 2. 左右两个分解完毕,直到小组仅有一个元素,返回 3. 返回上一级调用处(此时小组中是有2个元素的) 4. 执行Merge#特点: 稳定 #实现方法:递归 */原创 2017-07-22 16:24:51 · 482 阅读 · 0 评论 -
十大基础排序 · 五 --- 选择排序(不稳定)
1. 分析/*5. 选择排序(SelectSort) #时间复杂度: O(n^2) 空间复杂度:O(1)#分析: 每次选择最小的数字, 放到位置上, 再在剩下的数中选择处最小的数字实现方法:2个for循环 */2.源码void SelectSort(int arr[], int nLength) { if(arr == NULL ||nLength <=0) {原创 2017-07-22 16:30:42 · 514 阅读 · 0 评论 -
十大基础排序 · 三 --- 冒泡排序(稳定 ,常规写法)
1. 分析/*3. #时间复杂度: O(n^2) #最好时间复杂度: O(n) 有序情况 #适用场合: 冒泡排序对有序序列排序最快; #思想:两两比较,大的放后边;(每趟能确定一个元素位置) #分析: 两层循环:外层for 控制遍历次数,内层循环控制元素遍历; 由于每趟都确定了一个元素,所以每次遍历的元素个数减少1; 优化: 1.使得其对有序数组 遍历一次就确定是原创 2017-07-22 16:35:11 · 480 阅读 · 0 评论 -
十大基础排序 · 二 --- 希尔排序(不稳定)
1. 分析/*2. 希尔排序(ShellSort) #希尔排序的时间复杂度 较直接插入排序低,它的时间是所取“增量”序列的函数。 最好时间复杂度: O(n) 平均时间复杂度: O(1.2^n ~ 1.5^n) 最坏时间复杂度: O(n^2)#空间复杂度:O(1) #基本思想: 先将整个待排记录序列分割成为若干子序列分别进行直接插入排序, 待整个序列中原创 2017-07-22 16:39:11 · 2709 阅读 · 1 评论 -
十大基础排序 · 一 --- 直接插入排序(稳定)
1. 分析/*1. 直接插入排序(InsertSort) #时间复杂度: 最好时间复杂度:O(n) 平均时间复杂度:O(n^2) 最坏时间复杂度:O(n^2) #空间复杂度:O(1) #应用场合:1.元素特别少;2.数组基本有序;#分析: 1. 带排序 数组分成两部分 2. 将无序数组的元素依次插入到有序数组中去 2.1 保存无序的第一个原创 2017-07-22 16:41:35 · 492 阅读 · 0 评论 -
查找算法系列(二):哈希查找
1. 介绍哈希函数的构建 2. 哈希冲突的解决方法 3. 源码分享: 直接地址法 + 拉链法原创 2017-07-23 10:46:19 · 490 阅读 · 1 评论 -
查找算法系列(三):字典查找
我是小脆皮, 今天写一个字典树的博文~~~字典树,就是26叉树。因为26个英文字母所以26个叉! 介绍完了。。。我也惊讶与我的辞藻这么不华丽。。。。 二叉树我们都知道, 不知道的狠狠的撞向豆腐~ 字典树不过就多了几个叉!他的数据结构定义如下:typedef struct node { int nFlag; //标记到此是否有单词 char* pStr; //如果nFla原创 2017-08-09 10:41:51 · 3095 阅读 · 1 评论