- 博客(80)
- 收藏
- 关注
原创 插值查找
/// /// 插值查找,是对二分法查找的优化/// 二分法: mid = low + 1/2 (high - low)/// 插值查找:mid = low + ((point-array[low])/(array[high]-array[low]))(high-low)/// 插值优化了mid,使之更接近查找数值在有序序列的实际位置/// /// /// /// /// /// private static int InterpolationSearch(int[] arr, int
2021-01-11 09:24:33
227
1
原创 二分查找
/// /// 二分法查找,非递归方法实现,二分查找的条件是原数组有序/// 没有找到,返回-1;找到了,则返回索引/// /// /// /// /// private static int BinarySearch(int[] arr, int low, int height, int value){if (arr == null || arr.Length == 0 || low >= height){return -1;}int hi = height - 1;i
2021-01-11 09:23:38
215
原创 顺序查找
/// /// 顺序查找/// private static int SequenceSearch(int[] arr, int value){int length = arr.Length;for (int i = 0; i < length; i++){if(arr[i] == value){return i;}}return -1;}
2021-01-11 09:23:08
231
原创 万年历
protected void Page_Load(object sender, EventArgs e){createCalendar(DateTime.Now.Year, DateTime.Now.Month);}private void createCalendar(int year, int month){int days = DateTime.DaysInMonth(year, month);//得到当月的天数DateTime dt = new DateTime(year, month
2021-01-11 09:22:21
178
原创 C# 矩阵运算(加减乘、转置、求逆)
class Matrix{ /// <summary> /// 矩阵的转置 /// </summary> /// <param name= "iMatrix "> </param> public static double[,] Transpose(double[,] iMatrix) { int row = iMatrix.GetLength(0);
2021-01-11 09:21:13
556
原创 桶排序
/// /// 桶排序/// 类似于哈希表的拉链法,定义一个映射函数,将值放入对应的桶中/// 最坏时间情况:全部分到一个桶中O(N^2),一般情况为O(NlogN)/// 最好时间情况:每个桶中只有一个数据时最优O(N)/// int bucketNum = arr.Length;/// 映射函数:int bucketIndex = arr[i] * bucketNum / (max + 1);/// /// /// 数组的最大值/// private static int[] Bu
2021-01-11 09:19:48
132
原创 归并排序(List版本)
/// /// 归并排序 List版本/// 将两个(或两个以上)有序表合并成一个新的有序表/// public static List MergeSort(List list){int count = list.Count;if (count <= 1){return list;}int mid = count / 2;List left = new List();//定义左侧ListList right = new List();//定义右侧List //
2021-01-11 09:19:06
355
原创 归并排序
/// /// 归并排序 递归版本/// 将两个(或两个以上)有序表合并成一个新的有序表/// private static void MergeSort(int[] arr, int length){int[] temp = new int[length];MergeInternalSort(arr, 0, length, temp);} private static void MergeInternalSort(int[] arr, int first, int last, in
2021-01-11 09:17:59
105
1
原创 三向切分的快速排序
快速排序在实际应用中会面对大量具有重复元素的数组。相比原生的快排,有巨大的改进潜力。(从O(nlgn)提升到O(n))E.W.Dijlstra(对,就是Dijkstra最短路径算法的发明者)提出的算法是:对于每次切分:从数组的左边到右边遍历一次,维护三个指针,其中lt指针使得元素(arr[0]-arr[lt-1])的值均小于切分元素;gt指针使得元素(arr[gt+1]-arr[N-1])的值均大于切分元素;i指针使得元素(arr[lt]-arr[i-1])的值均等于切分元素,(arr[i]-arr[g
2021-01-11 09:16:40
411
原创 阶乘递归算法
//递归算法static int DiGui(int n){int sum = 0;if (0 == n){return 1;}else{sum = n * DiGui(n-1);}return sum;}
2021-01-11 09:11:15
217
原创 变异操作
/// /// 变异操作;/// private static void VariationOperate(){int rand = random.Next(0, 50);Console.WriteLine("变异的rand " + rand);if (rand < 5)//5/50 = 0.1的概率进行变异;rand<5;{Console.WriteLine(“开始变异”);int col = random.Next(0, 6);int row = random.Next
2021-01-07 13:39:48
715
1
原创 交叉操作
/// /// 交叉操作;/// private static void CrossOperate(){/** bit[0]~bit[5] fit* 4 000 110 12* 3 001 010 9* child1 000 010 14* child2 001 110 5*/int rand1 = random.Next(0, 6);//0-5;int rand2
2021-01-07 13:39:21
568
原创 轮盘赌
/// /// 更新下一代;/// 基于轮盘选择选择方法,进行基因型的选择;/// private static void UpdateNext(){// 获取总的fit;double totalFitValue = 0;for (int i = 0; i < chromosomes.Count; i++){//适应度为负数的取0;if (chromosomes[i].fitValue <= 0){totalFitValue += 0;}else{totalFi
2021-01-07 13:38:37
422
原创 算法时间测试
C#算法时间测试类Timing: public class Timing{ TimeSpan startingtime; TimeSpan duration; public Timing() { startingtime = new TimeSpan(0); duration = new TimeSpan(0); } public void stoptime() { d
2021-01-07 13:37:57
185
原创 凸包算法
private List calcConvexHull(List list){List resPoint = new List();//查找最小坐标点int minIndex = 0;for (int i = 1; i < list.Count; i++){if (list[i].Y < list[minIndex].Y){minIndex = i;}}Point minPoint = list[minIndex];resPoint.Add(list[minIndex]
2021-01-07 13:36:40
145
原创 在1~10000的整数中,找出同时符合以下条件的数:a.必须是质数。b.该数字各位数字之和为偶数,如数字12345,各位数字之和为1+2+3+4+5=15,不是偶数。
using System;using System.Collections.Generic;class program { static void Mian(string[] args) { int N =1000; List<int> primes = new List<int>(); primes.Add(2); Console.Write(2+" "); for(int
2021-01-07 13:35:00
420
原创 九九乘法表
static void Mu(){string t = string.Empty;for (int i = 1; i < 10; i++){for (int j = 1; j <= i; j++){t = string.Format("{0}*{1}={2} “, j, i, (j * i));Console.Write(t);//if (j * i < 82)// Console.Write(” “);if (i == j)Console.Write(”\n
2021-01-07 13:34:11
137
原创 1、1、1、2、3、5、8、13、21、34,....用C#递归写出算法,算出第30个数。
using System;class Program{static in F(int i){if(i<=0)return 0;else if(i>0 && i<=2)return 1;else return F(i-1) + F(i-2);} static void Main(string[] args) { int n = F(30); Console.WriteLine(n.ToString());
2021-01-07 13:31:47
985
原创 一个6位数乘以一个3位数,得到一个结果。但不清楚6位数的两个数字是什么,而且结果中有一位数字也不清楚,请编程找出问好代表的数字,答案可能有多个。
for (int a = 0; a < 10; a++){for (int b = 0; b < 10; b++){for (int c = 0; c < 10; c++){if ((120560 + a + b * 1000) * 123 == 15404987 + c * 10000){Console.WriteLine(a);Console.WriteLine(b);Console.WriteLine©;}}}}Console.Read();
2021-01-07 13:30:45
524
原创 堆排序
/*堆排序是一种选择排序,时间复杂度为O(nlog2n)。堆排序的特点是:在排序过程中,将待排序数组看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中父结点和子结点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。基本思想1.将待排序数组调整为一个大根堆。大根堆的堆顶元素就是这个堆中最大的元素。2.将大根堆的堆顶元素和无序区最后一个元素交换,并将无序区最后一个位置列入有序区,然后将新的无序区调整为大根堆。3.重复操作,直到无序区消失为止。初始时,整个数组为无序区。每一次
2021-01-07 13:29:36
124
原创 插入排序
/*直接插入排序(straight insertion sort)的做法是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置使有序表仍然有序,直至无序表中所有元素插入完为止。第一趟扫描前两个数,然后把第二个数按大小顺序插入到有序表中;第二趟把第三个数与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。直接插入排序属于稳定的排序,最坏时间复杂度为O(n^2),空间复杂度为O(1)。直接插入排序是由两层嵌套循环组成的。
2021-01-06 16:07:43
303
原创 折半查找法
/*Recursive Binary Search - by Chimomo[折半查找的前提]:1、待查找序列必须采用顺序存储结构。2、待查找序列必须是按关键字大小有序排列。时间复杂度:O(log2n)*/namespace RecursiveBinarySearch{using System;/// <summary>/// The program./// </summary>internal class Program{ /// <
2021-01-06 16:06:34
281
原创 希尔排序法
操作步骤:初始时,有一个大小为 10 的无序序列。(1)在第一趟排序中,令增量d = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。(2)按照直接插入排序的方法对每个组进行排序。(3)在第二趟排序中,我们把上次的 d 缩小一半,即 d= d / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。(4)按照直接插入排序的方法对每个组进行排序。(5)在第三趟排序中,再次把 d 缩小一半,即d = d / 2 = 1。 这样相隔距离为 1 的元素
2021-01-06 13:49:17
264
原创 高斯模糊算法
/// /// 高斯模糊/// /// /// /// public static void GaussianBlur(this Bitmap Bmp, ref Rectangle Rect, float Radius){int Result;IntPtr BlurEffect;BlurParameters BlurPara;if ((Radius < 0) || (Radius > 255)){throw new ArgumentOutOfRangeException
2021-01-06 13:48:08
236
原创 快速排序
/*快速排序(QuickSort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。设要排序的数组是a[0]…a[N-1],首先任意选取一个数据(通常选用数组的首元素)作为关键数据,然后将所有比它小的数都放到它的前面,所有比它大的数都放到它的后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定
2021-01-06 13:47:28
103
原创 1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
class Program{static void Main(string[] args){ //有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? //分解题目 //条件:四个数字1、2、3、4 ;三位数:百位、十位、个位 //要求:互不相同;无重复数字:每个数字在三位中只出现一次 //结果:多少个? 都是多少? int count = 0;
2021-01-06 13:45:01
276
原创 选择排序
选择排序是一种简单直观的排序算法。它的工作原理如下。首先在未排序列中找到最小的元素,存放到排序序列的起始位置。然后,在从剩余未排序元素中继续寻找最小的元素,放到排序序列末尾。以此类推,直到所有元素均排序完毕。class SelectSorter{private static int[] myArray;private static int arraySize;public static void Sort(int[] a){myArray = a;arraySize = myArray.L
2021-01-06 13:44:29
142
原创 冒泡排序
namespace BubbleSorter{class BubbleSorter{private static int[] myArray;private static int arraySize;public static void Sort(int[] a){myArray = a;arraySize = myArray.Length;BubbleSort(myArray);} public static void BubbleSort(int[] myArray)
2021-01-06 13:43:43
103
原创 C#算法:1-2+3-4....+n
static int F1(int m){int sum =0;bool flag =true;for (int i = 1; i <= m; i++){if (flag) //一次是默认是True,下下也为Truesum += i;elsesum -= i;flag = !flag; } return sum; }//方法二,通过奇偶性static int F2(int m){int sum = 0;for (int i = 1; i &
2021-01-06 13:43:05
2262
原创 C#常用算法总结
/// /// 1+2+3+…+n的递归算法/// /// /// public static int Process1( int i){//计算1+2+3+4+…+100的值 if (i == 0) return 1; if (i == 1) return 1; return Process1(i - 2) + Process1(i - 1); } /// <summary> /// 1+2+3+....+n的非递归算法 /// </
2021-01-06 13:40:58
576
原创 C#算法
using System;using System.Security.Cryptography;using System.IO;using System.Text;//1、将字符串转换成字节数组//2、选择加密方式//3、不可逆加密:MD5、SHA1//4、可逆加密:DES、RC2、Rijndael//5、对密钥要求长度不同//6、加密速度不同、复杂程度不同、安全性不同public class Class10{public Class10(){CallMyDES();}voi
2021-01-05 13:43:32
148
原创 C++ 无条件转移控制
goto转移控制goto <语句标记>;<语句标记>是个标识符,定义格式为<语句标记>: <语句>;注意:不能用goto语句从函数外部转入函数的内部,也不能从函数内部转入到函数的外部; 一般情况,很少使用goto语句从复合语句外部转到复合语句内部,多用于从复合语句内部转到复合语句外部,如退出多重循环(goto语句会破坏程序的结构,只有偶尔在这种情况下才使用),但是要是否会跳过变量定义语句,否则该就goto语句是非法的。bre..
2021-01-05 13:41:28
124
原创 C++ main函数的返回值
main函数通过返回值把整个程序的执行情况告诉调用者(通常是操作系统,但是操作系统通常会忽视main函数的返回值),一般情况下return 0表示正常结束,return -1表示非正常结束。main函数也可以不写return语句,这时当执行完最后一条语句后自动执行一条“return 0;”语句。其他函数的返回值原理同此。...
2021-01-05 13:40:20
559
原创 C++ 引用类型
引用类型:可以获得指针类型的效果,但是又可以避免指针可读性和可维护性差等问题。定义<类型> &<引用变量>;定义时要初始化<类型>可以是除了void以外的任意C++类型。如: int x=0; int &y=x;y=2;//此时x也是2引用类型 VS 指针类型1)二者访问语法不同,指针是 *<指针变量> ,引用是<引用变量>2)引用类型除了定义时指定的被引用变量外,不能再引用其他变量。3)该变量没有自己的内
2021-01-05 13:40:08
123
原创 算法 - 求n个数的中位数(C++)
#include #include #include #include <math.h>using namespace std;int QuickSortOnce(int a[], int low, int high) {// 将首元素作为枢轴。int pivot = a[low];int i = low, j = high;while (i < j) { // 从右到左,寻找首个小于pivot的元素。 while (a[j] >= pivot &a
2021-01-05 13:39:55
1066
原创 求两个自然数的最小公倍数
int GreatestCommonDivisor(int a, int b) {int t;if (a < b) { // 交换两个数,使大数放在a的位置上。 t = a; a = b; b = t;}while (b != 0) { // 利用辗转相除法,直到b为0为止。 t = a % b; a = b; b = t;}return a;}int LeastCommonMultiple(int a, int b
2021-01-05 13:39:24
201
原创 求圆面积和周长
class Circle{private :float radius;public:Circle(float r);Circle(Circle &C);float Area();float Girth();};Circle::Circle(float r){radius=r;}float Circle::Area(){return PIradiusradius;}float Circle::Girth(){return 2PIradius;}void ma
2021-01-05 13:39:09
129
原创 输出字符的ASCII码
#include using namespace std;int main(){char c;cin>>c;cout<<(int)c<<endl;return 0;}
2021-01-05 13:38:50
782
原创 C/C++
问1:请用简单的语言告诉我C++ 是什么?答:C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!问2:C和C++的区别?答:c++在c的基础上增添类,C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制
2021-01-05 13:38:21
120
原创 C++ 成员的访问控制
public访问不受限制,在程序的任何地方都能访问一个类的public成员。public成员是类与外界的一个接口。private默认的访问控制只能在本类和友元中访问。protected只能在本类、派生类和友元中访问。...
2021-01-05 13:38:04
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人