首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 经典算法分享 [已结帖,结帖人:greatverve]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatverve
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-15 11:46:07 楼主
    今天突然对算法起了兴趣,研究了两个最简单的,感觉很不错.分享一下.
    同时抛砖引玉,希望朋友们能提供更多短小精悍的,并且加上注释,
    和你自己的理解.哪怕你只提供了一个很简单的,只要是正确的,自己试过了.
    教教我,就给分.不要在网上查一大堆贴上去.
    另外,关于数据结构方向的也可以.
    C# code
    using System; using System.Collections.Generic; using System.Text; namespace UnionCompany { class Program { static void Main(string[] args) { //算法总结 Sort sort = new Sort(); //递归算法 Console.WriteLine(sort.Factorial(6)); // int[] arr ={ 1, 9, 3, 6 }; sort.SortProduce(ref arr); foreach (int i in arr) { Console.WriteLine(i); } Console.ReadLine(); } } public class Sort { /*******递归调用的原理********* * 首先,设置一个递归头,即当问题足够简化时,直接获得答案. * 其次,自己调用自己,即逐步缩小问题范围,比如把求n!转化为求(n-1)! *****************************/ /// <summary> /// 递归调用 /// </summary> /// <param name="n"></param> /// <returns></returns> public int Factorial(int n) { if (n == 1) return 1;//递归头 else return n * Factorial(n - 1);//递归调用自身 } /*******冒泡算法的原理********* * 根本原理:两两比较 * 比如1,9,3,6按升序排列, * 先比较1,9是升序,则转向比较9,3 ---1936 * 非升序则交换成3,9 ---1396 * 然后再比较9,6非升序则交换 --- 1369 * 这样子每扫描一轮,就从中挑出最大的,放在最后位置. *****************************/ /// <summary> /// 排序---冒泡排序 /// </summary> /// <param name="dataArray"></param> public void SortProduce(ref int[] dataArray) { int pass;//记录扫描次数 int i; int temp; int exchangeCnt;//记录交换次数 for (pass = 0; pass < dataArray.Length; pass++) { exchangeCnt = 0; for (i = 0; i < dataArray.Length - pass - 1; i++)//这里减1是因为最后一个不必再考虑. { if (dataArray[i] > dataArray[i + 1]) { temp = dataArray[i]; dataArray[i] = dataArray[i + 1]; dataArray[i + 1] = temp; exchangeCnt++; } } if (exchangeCnt == 0)//如果没有交换,说明已经排好序,返回. return; } } } }
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangjun8868
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 11:46:371楼 得分:0
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatverve
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 11:48:072楼 得分:0
    得分标准,代码简练,分析透彻,一目了然,呵呵,我想积累一些算法。
    谢谢大家。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangjun8868
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 11:56:393楼 得分:0
    快速排序
    C# code
    using System; namespace QuickSorter { public class QuickSorter { private void Swap(ref int l,ref int r) { int s; s=l; l=r; r=s; } public void Sort(int [] list,int low,int high) { int pivot; int l,r; int mid; if(high<=low) return; else if(high==low+1) { if(list[low]>list[high]) Swap(ref list[low],ref list[high]); return; } mid=(low+high)>>1; pivot=list[mid]; Swap(ref list[low],ref list[mid]); l=low+1; r=high; do { while(l<=r&&list[l]<pivot) l++; while(list[r]>=pivot) r--; if(l<r) Swap(ref list[l],ref list[r]); }while(l<r); list[low]=list[r]; list[r]=pivot; if(low+1<r) Sort(list,low,r-1); if(r+1<high) Sort(list,r+1,high); } } public class MainClass { public static void Main() { int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47}; QuickSorter q=new QuickSorter(); q.Sort(iArrary,0,13); for(int m=0;m<=13;m++) Console.WriteLine("{0}",iArrary[m]); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • melon23
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 11:59:504楼 得分:0
    关注
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hztltgg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:01:175楼 得分:0
    这些在.net环境下有用么?纯粹为了演示?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangjun8868
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:01:216楼 得分:100
    这个有注释
    C# code
    using System; using System.Collections.Generic; using System.Text; namespace QuickSort { class Program { static void Main(string[] args) { int[] nums = new int[] { 21, 32, 445,54,325,62,19, 65, 37, 67, 1, 2, 4, 7, 84 }; Quick_Sort q = new Quick_Sort(nums); q.QKSort(0, nums.Length - 1); for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); } Console.Read(); } } } public class Quick_Sort { public int [] nums; public Quick_Sort(int[] nums) { this.nums=nums; } public void QKSort(int Begin,int End ) { int mid; //如果数组只剩1个数 if (Begin == End) return; //如果只剩下2个 if (Begin + 1== End) { if (nums[Begin] > nums[End]) { mid = nums[Begin]; nums[Begin] = nums[End]; nums[End] = mid; } return; } //标志位,当为True时,左边指针移动,FLASE时,右边 bool Flag = false; //附加空间 int added; //b指向数组的头,e指向尾 int b=Begin; int e=End; //提取出数组第一个数作为参照数 added = nums[b]; while (b < e) { if (Flag)//判断左边的数 { if (nums[b] > added) { //交换到右边去 nums[e] = nums[b]; Flag = false; } else b++; } else//判断右边的数 { if (nums[e] < added) { //交换到左边去 nums[b] = nums[e]; Flag = true; } else e--; } } //这时b=e nums[b] = added; //递归 if (b > Begin) QKSort( Begin, b - 1); if (b < End) QKSort( b + 1, End); } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatverve
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:01:517楼 得分:0
    3楼,加点注释,或者解释一下。让大家都很快学会。谢谢。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatverve
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:07:308楼 得分:0
    什么叫纯粹为了演示?你不知道算法的重要性吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • greatverve
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:09:359楼 得分:0
    什么叫.net环境下有用吗,算法不分编程语言,我这些算数是从Java教材上搬过来的。
    这种程序思维很重要。特别是实现一个功能,好的算法和差得差别很大的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ccs02287
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

    发表于:2008-11-15 12:29:5710楼 得分:0
    学习下

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xyhuanwell
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:32:2711楼 得分:0
    算法重在思想,纯粹的算法有什么用,你可以去看下算法方面的书,现在的算法都不是一个人搞出来的了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hztltgg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:35:3612楼 得分:0
    得,算法当然重要,我是说.net不是应该面向应用的么,知道排序就行了,怎么排序一般不考虑的吧,和数据库一样,order by就行了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jiang_jiajia10
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:39:4113楼 得分:0
    强大
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • simon12528
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:44:4514楼 得分:0
    好东西! 学习了!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ws_hgo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:47:2515楼 得分:0
    JF
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hztltgg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:47:5016楼 得分:0
    上面的这些排序,参数都是整形数组,事实上别的类型怎么办?又拷贝一份?已经提供的泛型不用?还有,排序就得比较,这些比较,都是数值的,类的比较怎么办?已经提供的比较接口,让我们可以实现大小写字母相同或不同,片假名片假名相同或不同等等功能。

    上面的代码就是课本上看看,演示算法用的,没实际应用价值。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oyd
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 12:52:3917楼 得分:0
    那我把我自己写的一些算法的文章给你看看吧,主要讲字符串匹配的,简单有说明
    http://blog.csdn.net/oyd/archive/2008/10/30/3184235.aspx
    http://blog.csdn.net/oyd/archive/2008/10/31/3195098.aspx

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChargeForward
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 13:03:2318楼 得分:0
    将十进制转换成十四进制
    C/C++ code
    void fun( int input) { if (input >= 14) fun(input/14); printf("%c","0123456789ABCD"[input%14]); }

    其实这个很那个~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hy_lihuan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 13:06:0719楼 得分:0
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mjjzg
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 13:11:0120楼 得分:0
    看看再说
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WEBCONFIG
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 13:20:4421楼 得分:0
    关注。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mengxj85
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-15 14:04:3622楼 得分:0
    在CSDN下载区搜搜“C语言常用算法源代码”看看吧,还有“数据结构及算法经典“,我也记得不太清楚以前在哪个地方下了,很多算法,够你研究一阵子的哦
    修改 删除 举报 引用 回复
    进入用户个人空间