算法
Jacky_Cmd
这个作者很懒,什么都没留下…
展开
-
线性递归与尾递归
在数据结构与算法中,包括在做《剑指OFFER》的过程中,很多时候都会用到递归,之前对尾递归概念模模糊糊的,看了很多前辈写的博客,这里对其做点总结。1.递归:在计算机科学领域中,递归是通过递归函数来实现的,程序调用自身的编程技巧称为递归还是从简单的阶乘来理解:计算n!计算公式:n!=nx(n-1)x(n-2)......2x1;使用递归的方式定义为:2.线性递归:原创 2015-08-25 10:36:44 · 2764 阅读 · 1 评论 -
白话经典算法-快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2015-08-17 21:50:17 · 593 阅读 · 0 评论 -
HashTable相关操作实现(附完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20763801前言 学过Java的人肯定对Hash这个词非常之熟悉,HashTable、HashSet、HashMap等都是对哈希表的封装或改进。这次我们来看下哈希表用C语言表示的封装实现。哈希表 哈希表又叫转载 2015-08-30 10:02:53 · 503 阅读 · 0 评论 -
hash数组的一个简单应用
转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepphash一个貌似比较复杂的东西,实际上理解起来并不那么夸张,这里做个笔记。hash,中文翻译成杂乱的东西,有人也叫它杂凑,或者翻译成什么都不是的音译“哈希”。简单说来,hash就是为了把一个复杂的字串,通过一定的转换,得到一个简单的数字(通常是数字)。如"abcd"用各个字符的值直接相加,转载 2015-08-30 09:33:01 · 4595 阅读 · 0 评论 -
快速排序(含完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20306991快速排序 如名所示,快速排序是已知的平均时间复杂度均为O(n*logn)的几种排序算法中效率最高的一个,该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环,它在最坏情况下的时间复杂度为O(n*n),但只要稍加努力(正确选择枢轴元素)就可以转载 2015-08-26 20:05:56 · 2609 阅读 · 0 评论 -
数据结构:循环队列(队列的顺序表示)
原文地址:http://blog.csdn.net/lpp0900320123/article/details/20694409#commentshttp://blog.csdn.net/ns_code/article/details/11358133生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以转载 2015-08-28 21:47:53 · 1919 阅读 · 1 评论 -
学习心得:链表的操作(C语言实现)
今天将给大家讲述链表的学习心得。学习数据结构,毋庸置疑链表必须学好,后面的栈、队列、树、图都是以链表为基础的;链表的种类很多,有单链表、双链表、循环链表、非循环链表;在此,我们以非循环单链表为例,来讲链表的创建、求长度、排序、插入和排序。1.什么是链表 链表我的理解要包含以下特征:(1).由n个节点离散分配;(2).每个节点通过指针连接(3)每一个节点由一个前驱节点和一个后驱节转载 2015-08-28 18:11:36 · 1115 阅读 · 0 评论 -
栈的链式实现(C语言描述)
原文地址:http://blog.csdn.net/lpp0900320123/article/details/20615529 http://blog.csdn.net/ns_code/article/details/11358347栈本质上是一个线性表,只不过对线性表的操作进行了限制,只可以在表的一端进行操作(插入、删除元素)。栈是一种是一种实现数据“先进后出转载 2015-08-28 20:01:43 · 558 阅读 · 0 评论 -
数据结构:数组的操作(C语言描述)
数据的在计算机的存储方式分为:连续存储【数组】,非连续存储【链表、树、图and so on】;今天讨论的将是数组,包括数组的创建、打印输出,在数组后面追加元素,判断数组是否为空,判断数组是否为满,在数组的指定位置添加元素,在数组的指定位置删除元素,数组元素的倒置和数组元素的排序。对应的函数如下:[cpp] view plaincopyvoid转载 2015-08-28 20:43:37 · 565 阅读 · 0 评论 -
归并排序(含完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20306991 前言 之所以把归并排序和快速排序放在一起探讨,很明显两者有一些相似之处:这两种排序算法都采用了分治的思想。下面来逐个分析其实现思想。归并排序 实现思想 归并的含义很明显就是将两个或者两个以上的转载 2015-08-26 22:27:03 · 985 阅读 · 0 评论 -
白话经典算法系列之一 冒泡排序的三种实现
原文地址:http://blog.csdn.net/morewindows/article/details/6657829冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。转载 2015-08-26 18:06:06 · 568 阅读 · 0 评论 -
排序算法之希尔排序(C语言实现)
希尔排序也叫缩小增量排序,它其实是直接插入排序的一种改进版本,实质是一种分组插入方法基本思想:算法先将要排序的一组数按某个增量d(d减到1时,整个要排序的数被分成一组,排序完成。一般的初次取序列的一半为增量,以后每次减半,直到增量为1。基本步骤:以如下8个记录为例,来看一下排序的过程:40,32,28,45,28,55,12,24增量序列依次为:4,2,1原创 2015-08-25 17:27:50 · 1614 阅读 · 0 评论 -
排序算法之插入排序(C语言实现)
插入排序的(Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增一的有序表。基本思想:假如待排序的记录存放在数组A[0,1....n-1]中。初始时,A[0]自成一个有序区,无序区为A[1,2....n-1],从i=1起直到i=n-1,依次将A[i]插入到有序区A[0,..i-1]中,完成排序基本步骤:原创 2015-08-25 15:57:03 · 615 阅读 · 0 评论 -
【数据结构与算法】内部排序之三:堆排序(含完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20227303前言 堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用到的操作。比如我们建堆的时候可以采用堆转载 2015-08-25 21:22:40 · 490 阅读 · 0 评论 -
堆排序的完整过程
本文是对兰亭风雨大牛的堆排序文章的补充,方便自己回头复习,可以在看完其文章后再看这篇博文。输入A[0,1,2......n-1]堆排序的完整过程(以从小到大排序为例,选用最大堆):一.建堆:我们可以把叶子节点当作堆,在叶子节点的基础上添加非叶子结点,并调整,过程与调整堆一样。这里要注意数组下标是从0开始,所以节点(i)的左右子节点下标分别为2*i+1,2*i+2。并且第一个非叶原创 2015-08-25 23:41:49 · 3868 阅读 · 1 评论 -
排序算法之选择排序(C语言实现)
选择排序(Selection sort)是一种简单直观的排序算法基本思想:选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。与插入排序相比,选择排序是根据位置找数据,插入排序是根据数据找位置。基本步骤:n个记录的文件的选择排序可经过n-1趟直接选择排序得到有序结果:1.初始状态:有序区为空原创 2015-08-25 21:00:50 · 827 阅读 · 0 评论 -
八大排序算法
原文链接:http://blog.csdn.net/hguisu/article/details/7776068概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlo转载 2015-08-25 11:22:34 · 475 阅读 · 0 评论 -
队列的链式表示
参考资料:http://my.oschina.net/xinxingegeya/blog/266306?p=1http://blog.csdn.net/ns_code/article/details/12652257队列(queue)是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫队尾,允许删除的一端称为队头。//队转载 2015-09-01 20:06:49 · 809 阅读 · 0 评论