自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 请问现在是什么时间?

我的账号找回来了……

2018-05-31 15:49:52 297

原创 C#编程之经典算法——查找(五)

KMP法匹配       通过之前的讲解,我们了解了如何从一个数组中查找单个元素,而这一篇,让我们来一起学习下如何快速地从一个数组A中找出与另一个数组B完全匹配的连续的元素(即B为A的子集)。      首先,我们来看下面的例子。      string A = "abcdabcaba"; //在这里,我们把string当作char[]      string B = "abc

2011-06-18 00:19:00 2593

原创 C#编程之经典算法——查找(四)

斐波那契查找(Fibonacci search)       原理与折半查找是一样的。只不过是通过斐波那契数列来划分查找区域的。示例代码/// /// 斐波那契查找/// /// 递增的有序数组/// 查询的元素/// 返回元素在数组中索引。如果数组中无此元素则返回-1int Search4(char[] cArr, char c){ int

2011-06-17 16:18:00 697

原创 C#编程之经典算法——查找(三)

插入查找       插入查找的特点是根据给定值的大小和待查找区间关键字的分布来确定继续查找的范围。显然这种查找方法适合于关键字均匀分布的表,在这种情况下,对表长较大的顺序表,其平均性能要比折半查找好。 代码示例/// /// 插入查找/// /// 递增的有序数组/// 查询的元素/// 返回元素在数组中索引。如果数组中无此元素则返回-1int Sea

2011-06-17 15:03:00 549

原创 C#编程之经典算法——查找(二)

折半查找       折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。 代码示

2011-06-17 14:12:00 837

原创 C#编程之经典算法——查找(一)

顺序查询       这没啥说的,在查询的方法中,这个方法最简单。代码示例int Search(char[] cArr,char c){ for (int i = 0; i < cArr.Length; i++) { if (cArr[i] == c) { return i; }

2011-06-17 04:43:00 563

原创 C#编程之经典算法——递归过程(四)

背包问题(Knapsack problem)       背包问题是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超

2011-06-09 22:19:00 383

原创 C#编程之经典算法——递归过程(三)

八皇后问题           八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发

2011-06-09 20:57:00 419

原创 C#编程之经典算法——递归过程(二)

迷宫(Maze)迷宫算法示例:bool isReached = false;int ox = 0, oy = 0;//起点/// /// 迷宫/// /// /// X起点/// Y起点void Maze(int[,] maze,int x,int y){ //0 未走过的点 //1

2011-06-09 19:16:00 491

原创 C#编程之经典算法——递归过程(一)

汉诺塔(Tower of Hanoi)          汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 来源  汉诺塔是源自印度神话

2011-06-09 13:53:00 1398

原创 C#编程之经典算法——排序(十二)

锦标赛排序(Tournamentsort)      锦标赛排序是按照体育比赛的规则来进行排序的。首先对n个记录进行两两比较,然后在每一对中关键字较小者再进行两两比较,直到最后选出最小者。之后根据关系的可传递性,只需要再和关键字中次小记录进行比较来选择次小者,以此类推。 锦标赛排序示例struct Ooo{ public int key;//值 publ

2011-06-05 23:23:00 516

原创 C#编程之经典算法——排序(十一)

希尔排序(Shellsort)      希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。s希尔排序基本思想:   先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2

2011-06-05 19:01:00 352

原创 C#编程之经典算法——排序(十)

归并排序(Mergesort)           归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。      归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。   将已有序的子序列合

2011-06-05 17:11:00 330

原创 C#编程之经典算法——排序(九)

基数排序(Radixsort)      属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高

2011-06-05 14:46:00 404

原创 C#编程之经典算法——排序(八)

<br />表插入排序(List Insertion Sort)<br /><br />      表插入排序是一种以链表为储存结构来进行插入排序的一种排序方法。由于不需要移动记录,只需要修改指针地址,因此在非受管制代码中,其排序需要时间要比直接插入排序要少。但在受管制代码中,不能直接访问内存地址,因此,此方法在C#中要比其它的排序要花费更多的时间与空间。<br /> <br />表插入排序示例(仅作学习用)<br />class MyList{ public int value;

2011-05-30 21:49:00 320

原创 C#编程之经典算法——排序(七)

<br />选择排序(Selectsort)<br /> <br />      每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。<br /> <br />选择排序示例<br />/// <summary>/// 选择排序/// </summary>/// <param name="arr"></param>static void Selectsort(int[] arr){ in

2011-05-30 19:44:00 365

原创 C#编程之经典算法——排序(六)

<br />双向起泡排序(Bidirectional Bubblesort)<br /><br />      双向起泡排序是冒泡排序的升级版,双向起泡排序连够在一次循环中同时取得最大值与最小值,所以用双向冒泡排序的交换的次数减少了,从而达到了优化起泡法的作用。<br /> <br />双向起泡排序示例<br />/// <summary>/// 双向起泡/// </summary>/// <param name="arr">待排序序列</param>void Bubblesort1(int

2011-05-30 19:26:00 421

原创 C#编程之经典算法——排序(五)

<br />平衡快排(Balanced Quicksort)与随机化快排(Randomization Quicksort)<br /><br />      平衡快排与普通快速的原理相同,只是尽可能地选择一个能够代表中值的元素作为关键数据,然后遵循普通快排的原则进行比较、替换和递归。通常来说,选择这个数据的方法是取开头、结尾、中间3个数据,通过比较选出其中的中值。<br /> <br />平衡快排示例<br />/// <summary>/// 平衡快排/// </summary>/// <pa

2011-05-30 18:38:00 444

原创 C#编程之经典算法——排序(四)

<br />直接插入排序(straight insertion sort)<br /> <br />      直接插入排序的作法是: <br />  每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 <br />  第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。 <br />  直接插入排序属于稳定的排序,时间复杂性为o(n^2),

2011-05-30 17:19:00 1410

原创 C#编程之经典算法——排序(三)

<br />快速排序(Quicksort)<br />      <br />      快速排序是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。<br />      设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后

2011-05-30 16:52:00 592

原创 C#编程之经典算法——排序(二)

<br />堆排序(Heapsort)<br />      <br />      堆积排序是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。<br /> <br />      1991年计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )。<br />      “堆”定义<br />  n个关键字序列Kl,K2,…,

2011-05-30 14:16:00 445

原创 C#编程之经典算法——排序(一)

<br />冒泡排序(BubbleSort)<br />      <br />      冒泡排序,是指计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。冒泡排序是经过n-1趟

2011-05-29 18:57:00 754 1

原创 C#编程之C#基础(七)

<br />      虽然语句是C#程序的构造块,但任何一条符合语法C#语句离不开表达式。<br />      “表达式”是由一个或多个操作数以及零个或零个以上的运算符所组成的序列,可以通过计算得到一个值、对象、方法或命名空间等结果。表达式可以包含文本值、方法调用、运算符及其操作数,或简单名称。简单名称可以是变量、类型成员、方法参数、命名空间或类型的名称。<br />      表达式可以使用运算符,而运算符又可以将其他表达式用作参数,或者使用方法调用,而方法调用的参数又可以是其他方法调用,因此表达式既

2011-05-27 22:59:00 310

原创 C#编程之C#基础(七)

<br />      虽然语句是C#程序的构造块,但任何一条符合语法C#语句离不开表达式。<br />      “表达式”是由一个或多个操作数以及零个或零个以上的运算符所组成的序列,可以通过计算得到一个值、对象、方法或命名空间等结果。表达式可以包含文本值、方法调用、运算符及其操作数,或简单名称。简单名称可以是变量、类型成员、方法参数、命名空间或类型的名称。<br />      表达式可以使用运算符,而运算符又可以将其他表达式用作参数,或者使用方法调用,而方法调用的参数又可以是其他方法调用,因此表达式既

2011-05-27 22:59:00 306

原创 C#编程之C#基础(六)

<br />      语句是构造所有 C# 程序的过程构造块。英文分号(;)标志着一条语句的结束。由大括号{}括起来的一系列语句构成代码块。方法体是代码块的一个示例。<br />      简单的语句如<br />int i = 1;string s = "Hello world.";<br />      复杂的语句都是由简单语句构成。语句是程序指令,除非特别声明,语句都按顺序执行。C#具有以下类别的语句:选择语句 (关键字:if,else,switch,case)<br />int val = 9

2011-05-05 18:40:00 318

原创 C#编程之C#基础(五)

      除了类和接口,C#还拥有一个特殊的类型:结构(struct)。结构是静止的、值类型的类。结构不能从另一个结构或类继承,也不能被继承。结构可以实现接口。与类不同,结构的实例化可以不用new运算符。结构可以声明构造函数,但必须指名参数。结构也可以拥有方法,不过,拥有方法的结构建议用类代替。结构的定义方法为struct StructName{ //fields...}      到了这里我们已经可以知道怎么去定义自己的类,接口还有结构。在定义接口与结构时,我们没有在前面加任何修饰关键

2011-05-05 15:38:00 312

原创 C#编程之C#基础(四)

      在上一段中。Apple类继承于Fruit类。类的继承方式为class ClassName : BaseClass{}      类不仅可以继承于类,还可以继承于接口。类只能继承于一个基类(父类),却可以继承于多个接口,被继承的类和接口以英文逗号(,)隔开。如果一个类同时继承于类和接口时,被继承的类排列在被继承的所有被继承的接口的前面,就像这样class ClassName:BaseClass,Interface1,Interface2...{}      接口(Interface

2011-05-05 15:11:00 281

原创 C#编程之C#基础(三)

      在前面,我们定义了一个类。那么什么是类呢?      类(class),是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。类的更严格的定义是由某种特定的元数据所组成的内聚的包。它描述了一些对象的行为规则,而这些对象就被称为该类的实例。类有接口和结构。接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性。类是与某个层(这里的层指类型层次中连接时模块依赖性相同的类的集合,即某环境下可重用性相同的组件的集合)的对象的最具体的类型

2011-05-05 12:55:00 530

原创 C#编程之C#基础(二)

      接着之前的话题,学着工程生成的默认的程序,我们也来定义一个属于我们自己的类。在原有的工程下面增加一个新的文件,命名为MyClass.cs。双击打开这个文件,这个文件中的内容与之前的内容几乎一样,除了类的名字不一样,类中没有定义方法。      以此我们可以看出。命名空间的定义方法为:namespace 命名空间的名字{}类的定义方法为:class 类的名字{}然后我们在这个类中定义一个数学方法:sum。using System;using System.Collections

2011-05-04 13:59:00 730

原创 C#编程之C#基础(一)

 好了,终于可以看到C#的真面目了。与以往所有的高级编程语言一样,首先,需要了解一下C#的语言结构。虽然很多教学的书籍上面都会以一个"Hello world”的程序作为一个语言的入门程序,对于一个初步涉及程序开发的人来说,这是一件很有意思的事情。但在此之前呢,大家可以打开MSDN看一下C#的最基础的关键,来认识一下每一个关键字代表着什么。C#关键字在这些关键字中,abstractconstexplicitexternin(泛型修饰符)internaloverrideout(泛型修饰符)privateprot

2011-05-04 12:50:00 420

原创 C#编程之初识C#

      C#(C Sharp)是微软公司在二OOO年六月发布的一种新的面向对象的编程语言。说到C#就必然要和.NET Framework联系到一起。C#是.NET Framework平台下面的一个语言分支。在认识C#之前,我们要先来认识一下.NET Framework。      什么是.NET Framework呢?简单的说,.NET Framework就是执行包括C#在内的代码的环境。它是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rap

2011-05-03 14:56:00 431

原创 C#编程之写在开篇之前

      很久以来,一直从事着各种各样的工作。很偶然的机会,接触到了C++,并对它深深着迷,并以此为梯,爬上了C#这座“高楼”。之所以称之为“高楼”,除了赞叹其在科学技术方面的成就及深远意义,更感叹于其所蕴含的知识的广泛。      学习C#也有几年了,但就是学的越多发现自己会的越少。现在回过头来想想,感觉自己还是什么都不会。几乎每次写“项目”的时候,第一意识就是去网上的找代码。然后把找到的代码一点一点的放到自己的工程下,接下的日子就一直在调试修改中度过了。大家也许发现了,这是我在这里写的第一篇博文,而且

2011-05-03 13:17:00 430

空空如也

空空如也

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

TA关注的人

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