自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奇颖润华

For the Future

  • 博客(15)
  • 收藏
  • 关注

原创 二分查找,二叉查找树(二叉排序树)的基本思想以及算法实现

一、二分查找(折半查找)在介绍二叉查找树之前,我们先来介绍一下二分查找。二分查找又称为折半查找,仅适用于有序顺序表。其基本思想是:首先将给定值K与表中中间位置的关键字比较,若相等,则查找成功,返回该元素的下标;若不等,则所查找的元素只能在中间数据以外前半部分或后半部分。然后在缩小的区间中继续进行同样的查找,如此重复直到找到为止,如果查找区间缩小到只有一个元素,其关键字仍不等于k,则查找失败。其

2013-11-02 16:43:38 4205

原创 关于散列(Hash)表的一些总结

1、引言我们讨论的链表和树表的查找中,记录在表中的位置跟记录的关键字之间不存在确定关系,因此,这些表中查找记录时需要进行一系列的关键字比较,查找的效率取决于比较的次数。散列表是一种根据关键字而直接访问的数据结构,也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系,这里建立映射关系的函数叫散列函数。散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这种情况为“冲突”(

2013-11-02 15:51:45 1075

原创 快速排序(基本思想以及算法实现)

1、引言快速排序(QuickSort)是对冒泡排序的一种改进,正如它的名字所标识的,它是在实践中最快的已知排序算法,它的平均时间复杂度是O(N*logN),该算法之所以特别快,主要是由于非常精炼和高度优化的内部循环,它的最坏时间复杂度是O(N*N),但稍加努力就可以避免这种情形。像归并排序一样,快速排序也是一种分治的递归算法。快速基本思想是:通过一趟排序将排序的数据分割成独立的两部分,其中

2013-10-30 22:08:01 1874

原创 归并排序(基本思想以及算法实现)

1、算法思想:归并排序是简历在归并操作上的一种有效的排序算法,该算法的递归实现方式是采用分治法的一个典型的应用,它是一个稳定的排序算法,其时间复杂度为O(N*logN),空间复杂度为O(N).在介绍其具体实现之前,我们先来回忆下如何将两个有序序列合并的问题(http://blog.youkuaiyun.com/qiyingrunhua/article/details/13276833).该算法可简写成

2013-10-30 16:20:13 3799

原创 堆排序(基本思想以及算法实现)

1、引言简单选择排序算法是通过比较,确定最终的位置。假设未排序的元素个数为N,则遍历一趟,需要比较N-1次,再遍历下一趟时,需比较N-2次。但是,第二次的比较是完全独立的,没有利用第一次比较的信息,因为第一次比较时也没有把比较信息保留下来。那么能否找到一种方法,可以将本趟比较信息记录下来,以供下一次求最值时使用,从而达到减少比较次数的目的呢?下面介绍的堆排序就是一种利用堆的性质来进行的选择

2013-10-30 15:20:32 5843 1

原创 三种最简单的排序算法(直接插入排序、冒泡排序、简单选择排序)

一、直接插入排序(稳定)直接插入排序是最简单的排序方法之一,其基本思想是每次从无序表中取出一个元素,把它插入到有序表的合适位置,使有序表依然有序。直接插入排序是由两层嵌套循环组成的,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置,其算法时间复杂度为O(N*N),空间复杂度为O(1)。void insertSort(int a[], int len) //本文默认排

2013-10-29 21:28:17 3717

原创 二叉树的遍历算法(先序中序后序遍历的递归算法与非递归算法、层级遍历的递归与非递归算法)

1、由于顺序存储对空间利用率较低,因此一般二叉树都采用链式存储结构。typedef struct node { ElemType data; //数据域 struct node *lchild; //左孩子指针 struct node *rchild; //右孩子指针} BTNode; 2、二叉树遍历的递归算法:先序

2013-10-28 22:46:42 1662

原创 求单链表倒数第k个结点(没有尾指针)

注:本题为2009年全国硕士生考研真题算法基本思想:定义两个指针变量p和q,初始时均指向头结点的下一个结点(链表的第一个结点),p指针沿链表移动;当p指针移动到第k个结点时,q指针开始与p指针同步移动;当p指针移动到最后一个结点时,q指针所指向结点为倒数第k个结点,以上过程对链表仅进行一遍扫描。int Search_k(LinkList L, int k){ LinkLis

2013-10-28 21:50:22 683

原创 理想与现实

于如今,于这番糜烂的生活步调,会让自己鄙夷到不耻去写些什么心历路程。特别面对理想这样的标题,总觉得手中的键盘会不如以往那样铿锵有力。然而,生活还是要走下去的,不论有多少的迷惘,不论是多么的不堪,还是得硬着头皮走下去。唯有愿意改变并赋予实践,才可能有所改变。理想?很多时候在跟朋友谈到理想这个话题的时候,我都会说我的理想和人生的准则是做个好儿子做个好丈夫做个好父亲,然后拥有数个散落在天涯却又能彼此

2013-10-28 19:38:36 758

原创 两个有序数组交集与并集的实现

有序数组的交集:分别从前向后遍历,如果相等则保存,否则将较小数对应的数组向后继续遍历,直到有一个数组遍历结束.void intersection(const vector& v1,const vector& v2,vector& des)//求交集 { int i,j; i = j = 0;//定位到2个有序向量的头部

2013-10-27 22:12:24 2465

原创 单链表的基本操作的实现(建立、插入、删除、逆序)

单链表的定义typedef struct LNode //定义单链表结点类型{ int data; //数据域 struct LNode *next; //指针域}LNode,*LinkList; 头插法建立带头结点的单链表:LinkList CreateList1(LinkList &L) { int

2013-10-27 21:00:13 1412

原创 字符串转换为整数(atoi)与整数转换成字符串(itoa)的实现

字符串转换成整数思路(atoi):如有空白符,则跳过;如有符号,则记录符号并跳过;取整数部分并执行转换(循环累加)int myatoi(char str[]){ int sign,n,i; for(i=0;isspace(str[i]);i++) //跳过空白符 ; sign=(str[i]=='-')?-1:1; //检查符号 if(str[i]=='+'||

2013-10-26 22:20:04 769

原创 求数组的子数组之和的最大值问题的实现

本题源自编程之美,也是2006年微软亚研院的笔试题,下面直接给出最优算法的思路及代码基本思路:用sum保存当前的计算值,用max保存最终的最大值。那么从数组的第一个元素向后扫描,当sum>0时则继续累加,当summax,则将其值赋给max,算法如下:int maxSum(int a[n]) { int max=a[0]; //全负情况,返

2013-10-25 21:52:19 461

原创 左旋转字符串的实现(将字符串前面的k个字符移动到字符串的尾部)

1、左旋转字符串(2010年全国研究生入学考试真题)描述:将字符串前面的k个字符移动到字符串的尾部,设字符串的长度为n.一般思路:每次将数组中元素左移一位,循环k次技术,代码如下:char *test(char str[],int k){ if(str==NULL) return 0; //判空操作,养成良好的编程习惯 int N=strlen(str); wh

2013-10-25 21:04:26 1137

原创 字符串函数的实现(StrLen、StrCpy、StrCat、StrReverse)

行万事,不可舍本逐末。如何写出有质量的基本函数,也是重中之重!本文主要涉及以下四个基本字符串函数的实现:1、求给定字符串的长度(StrLen);2、字符串的拷贝(StrCpy);3、字符串的连接(StrCat);4、字符串的反转(StrRev).int StrLen(char *str) { if (str==NULL) retu

2013-10-25 16:06:53 743

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除