![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm—数据结构与算法
文章平均质量分 86
u010667082
这个作者很懒,什么都没留下…
展开
-
简单的插入排序
直接插入排序的基本思想:将待排序数组分为两部分:已排好序部分和未排序部分。其主要步骤为:开始时,第一个元素在已排好序部分中,其余部分在未排序部分。然后依次从插入排序的具体做法:在插入第i个记录时,k1,k2,k3,...,ki-1,已经排好序,将关键字ki依次与ki-1,ki-2,...,k2,k1进行比较,从而找到应该插入的位置,然后将ki 插入,插入位置及其后的记录依次后移动。原创 2015-05-30 15:05:44 · 384 阅读 · 0 评论 -
查找算法 数据结构
查找算法总体分为静态查找,和动态查找,其中静态查找法,不改变查找表结构,动态查找表,可以进行插入和删除操作。一、查找的基本概念查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。二、顺序查找针对无序序列的一种最简单的查找方式。时间复杂度为O(n)。三、折半查找针对已排序序列的一种查找方式。并且只适用于原创 2015-08-03 15:31:12 · 526 阅读 · 0 评论 -
根据先序和中序或后序和中序建立二叉树及树的遍历
二叉树的建立用了递归的思想,本质上是: 先建立根节点--->再建立左子树----->再建立右子树二叉树的遍历分为先序遍历,中序遍历后序遍历,还有层序遍历 注意无论先序中序还是后序都是先遍历左子树再遍历右子树由前序和中序遍历或由中序和后序遍历序列可以唯一确定一棵二叉树,而由前序和后序遍历序列不能唯一确定一棵二叉树前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子原创 2015-05-30 14:49:26 · 7386 阅读 · 4 评论 -
动态规划
以下是根据动态规划的步骤求解一个最基本的01 背包问题最直接的做法/*描述 有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W 的物品,求所有挑选方案中物品价值总和的最大值。 1 <= n <=50 1 <= wi <= 10 1 <= vi <= 50 1 <= W <= 10输入多组测试数据。每组测试数据第一行输入,n 和 W原创 2015-06-10 10:18:10 · 364 阅读 · 0 评论 -
希尔排序堆排序和基数排序
希尔排序又称缩小增量排序,它是对直接插入排序方法的一种改进。希尔排序是不稳定的排序,时间复杂度小于O(n^2) 优于直接插入排序,空间复杂度O(1)希尔排序的基本思想:对与含有n个元素的序列,取初始增量d1//希尔排序 又称缩小增量排序,它是对直接插入排序方法的改进void ShellSort(int *a,int n){ int dk=n/2;//初始增量dk<n原创 2015-07-15 15:35:01 · 720 阅读 · 0 评论 -
基数排序
一. 算法描述基数排序(以整形为例),将整形10进制按每位拆分,然后从低位到高位依次比较各个位。主要分为两个过程:(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中重复(1)(2)过程,从个位到最高位(比如32位无符号整形最大数4294967296,最高位10转载 2015-07-15 21:05:50 · 298 阅读 · 0 评论 -
单链表的插入删除反转和冒泡排序单链表
以下程序的单链表不含有头结点,其中的头指针指向一个数据结点。#include#include#include#includeusing namespace std;typedef struct ListNode{ int data; ListNode * next;}ListNode;//插入结点考虑两种情况,链表为空链表非空void AddLis原创 2015-07-22 14:03:36 · 413 阅读 · 0 评论 -
红黑树
之前看了很多写红黑树的博客,但是感觉都讲的不太清楚!没说这样操作如何使他保持平衡的,于是疑惑重重,就看不下去了,一次不经意看到一个人说维基百科的红黑树讲的好,我就随便点了一下一看——这下疯了~,怎么讲的这么好!可以说是把一个复杂的问题,讲得简单化!这太幸福了! 于是我就慢慢学会了!强烈推荐维基的这个讲解,再也找不到比这还好的讲解了!不知道它上边其它的怎么样,反正这个很好!!既然学会了,走过来了,我转载 2015-08-03 09:58:54 · 269 阅读 · 0 评论 -
链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作
链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作其实本质上就是用含头结点的单链表来模拟队列的入队和出队,以及栈的入栈和出栈换句话来形容,用单链表来实现队列和栈对于队列:存储结构typedef struct QueueNode//队列结点{ int data; QueueNode *next;}QueueNode;typedef struct原创 2015-07-22 15:12:18 · 23300 阅读 · 0 评论 -
字符串的全排列和组合
今天学习了一下何海涛博客中的第28题,字符串的排列问题,实际上指的是字符串的全排列问题(排列和全排列还是有区别的吧)。思考并研究了这题之后就考虑了一下不同条件下其他类似的题的解法的编写,两部分来自于何海涛,其他来自于网络,此处做搬运和收集工作。分别从四个方面考虑:一、字符串的全排列(1)若不考虑字符串中有重复字符(即假设字符串中无重复字符)(2)若考虑字符串中有重复字符(即假设字符串中有重转载 2015-06-14 17:20:55 · 714 阅读 · 0 评论 -
浅析几种排序
排序算法有很多,这里简单介绍一下,冒泡排序,简单选择排序,插入排序,快速排序,和归并排序。在程序的编写中,可以直接用c++ 中#include 中的sort() 函数这个最简单sort()函数默认情况下是从小到大排序如对 int b[10]={99,55,2,1,6,33,4,5,1,0};进行排序。sort(b,b+10); 要使其从大到小排序只需要外加一个谓词函数就可以了 bool c原创 2015-05-30 20:40:01 · 596 阅读 · 0 评论