数据结构与算法
文章平均质量分 72
dangzhileiqaz
这个作者很懒,什么都没留下…
展开
-
大话数据结构之队列
队列(Queue):一种先进先出(first in first out)的线性表。只允许在尾部(rear)插入,头部(front)删除。上图可以形象的描述队列的特点。数据元素排队进入队列,按顺序排队出队列。实现顺序队列时,可以采用一组地址连续的地址单元,例如数组。队列头(front)与队尾(rear)在初始化时,指向数组的"0"地址。下面为插入新的元素时的操作:原创 2013-07-27 18:50:45 · 648 阅读 · 0 评论 -
二分(折半)查找
折半查找:又叫二分查找,采用分治思想,适用于不经常变动且查找频繁的表;算法思想:将n个元素(假设n个元素升序)分为大致相同的两部分,取data[n / 2] 与目标元素m比较:若data[n/2] == m:return (n / 2);若data[n/2] > m:则我们只要在data[]的左半部分继续查找;若data[n/2] 时间复杂度:O(logn);优点:比较原创 2013-11-18 21:22:00 · 659 阅读 · 0 评论 -
链表(待续)
#include#include #include #include "List.h"using namespace std;//--------------------------------------------------------------------------------------------------------------------------/原创 2013-12-30 08:24:21 · 567 阅读 · 0 评论 -
排序之归并排序(MergeSort)
归并排序(Merge Sort)基本思想: 将两个或者两个以上的有序表合并为一个新的有序表,即将待排序序列分成若干个子序列,在每个子序列有序的前提下,将子序列合并为整体有序的序列;举例:归并排序,先分解成小的序列,对子序列排序,在合并子序列,故其是分治法的典型应用;重点是如何合并两个有序的子序列。合并操作: 假设序列data[i..原创 2013-12-09 19:24:41 · 587 阅读 · 0 评论 -
七大排序算法总结
各种排序的稳定性,时间复杂度和空间复杂度总结: 我们比较时间复杂度函数的情况: 时间复杂度函数O(n)的增长情况所以对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法。时间复杂度来说:(1)平方阶(O(n2))排序 各转载 2013-12-09 20:23:18 · 735 阅读 · 0 评论 -
排序之希尔排序(Shell Sort)
希尔排序(Shell Sort):又叫缩小增量排序,该方法是直接插入排序的改进,其实质就是分组直接插入排序;我们还记得直接插入排序对基本有序的序列排序时,效率很高;由此思想得出希尔排序;基本思想: 先将待排序序列分成若干个子序列(由相距同等增量的元素组成),然后分别对分组序列进行直接插入排序; 缩小增量,依据增量再次分组排序。待到整个序列基本有序时,整体进行直原创 2013-12-08 15:32:55 · 546 阅读 · 0 评论 -
排序之直接插入排序(Straight Insertion Sort)
直接插入排序(Straight Insertion Sort)的基本思想: 依次从无序表中取出一个元素,将其插入有序表的合适位置,从而使得有序表依然有序,长度加1,重复操作直至全部记录完成插入为止;算法操作:设数组为data[0 , 1 , 2 , ......n - 1]: 1) 初始时, 将data[0]设置为有序区, data[1 , 2 , ....原创 2013-12-08 09:32:42 · 689 阅读 · 0 评论 -
排序之冒泡排序(Bubble Sort)
冒泡排序思想:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。代码实现:#includeusing namespace std;//-----------------原创 2013-12-07 20:53:38 · 644 阅读 · 0 评论 -
排序之堆排序(Heap Sort)
堆的定义:具有n个元素的序列{k1 , k2 , k3 ......kn},当且仅当满足条件:此时序列成为堆;若用数组存储堆,则堆可以看作完全二叉树,只不过其任一非叶节点满足上述性质,即:Key[i] Key[2i] && Key[i] => Key[2i + 1](大顶堆)(1)所有非叶节点均不大于或者均不小于其左右子节点;(2)所有节点的左子树或者右子树皆满足原创 2013-12-07 19:18:58 · 730 阅读 · 1 评论 -
排序之简单选择排序(Simple Selection Sort)
简单选择排序(Simple Selection Sort)基本思想: 首先在待排序序列中选择最小的元素与序列的第一个位置元素交换,然后在剩余序列中再找出最小的元素与第二个 位置元素交换。以此类推,直至第n-1个元素与第n个元素比较交换为止;(也可以理解为依次从无序区中选择最小的 元素插入到有序区的末尾位置)算法操作:设数组data[0......n-1]:原创 2013-12-08 10:39:40 · 587 阅读 · 0 评论 -
计数排序
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。计数排序的基本思想是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中原创 2013-11-12 19:14:27 · 387 阅读 · 0 评论 -
大话数据结构之单链表
单链表线性表的链式存储结构的是用一组任意的存储单元存储线性表的数据元素.这组存储单元可以是连续的,也可以是不连续的.数据域:存储数据元素信息的域。指针域:存储直接后继位置的域。这两部分信息组成数据元素的存储映像,成为节点(Node)。n 个结点链接成一个链表,即为线性表(a1,a2,a3…….an)的链式存储结构。,有因为此链表的每个结点只含有一个指针域,故称单链表。图(1)原创 2013-07-27 21:21:34 · 673 阅读 · 0 评论 -
大话数据结构之栈
栈(stack)定义:限定仅在表尾进行插入与删除操作的线性表。栈的操作特点:就是后进先出(Last in First out ).(1) 栈顶(top):允许插入语删除的一端。(2) 栈底(base):位于栈的底部,固定不动。栈的插入操作,称为进栈,入栈。栈的删除操作,成为出栈,弹栈。如图:实现代码:typedef int SElemType;t原创 2013-07-27 19:35:21 · 513 阅读 · 0 评论 -
排序之快速排序(Quick Sort)
快速排序:代码实现:#include#includeusing namespace std;//---------------------------------------------快速排序Soulation1---------------------------------------int partion_Soulation1(int* data , int start原创 2013-11-15 21:09:44 · 949 阅读 · 0 评论