1 快速排序
介绍:

  快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。

步骤:

•从数列中挑出一个元素,称为 "基准"(pivot),
•重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
•递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
排序效果:

 

详细过程:

 

 

2 归并排序
介绍:

  归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用

步骤:

•申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
•设定两个指针,最初位置分别为两个已经排序序列的起始位置
•比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
•重复步骤3直到某一指针达到序列尾
•将另一序列剩下的所有元素直接复制到合并序列尾
排序效果:

 

详细过程:

 

 

3 堆排序
介绍:

  堆积排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

步骤:

(比较复杂,自己上网查吧)

排序效果:

 

详细过程:

(暂无)

4 选择排序
介绍:

  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

排序效果:

 

详细过程:

 

 

5 冒泡排序
介绍:

  冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

步骤:

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
排序效果:

 

详细过程:

 

 

6 插入排序
介绍:

  插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤:

•从第一个元素开始,该元素可以认为已经被排序
•取出下一个元素,在已经排序的元素序列中从后向前扫描
•如果该元素(已排序)大于新元素,将该元素移到下一位置
•重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
•将新元素插入到该位置中
•重复步骤2
排序效果:

 (暂无)

详细过程:

 

 

7 希尔排序
介绍:

  希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。

  希尔排序是基于插入排序的以下两点性质而提出改进方法的:

•插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
•但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位
排序效果:

 

详细过程:

 

 

----------------------------------------------------------------------------------------------------------------------

Over!

希望对大家有帮助免费发布信息

posted @ 2011-12-26 16:21 牛啊牛 阅读(4) 评论(0) 编辑

一 Webx的概括

WEBX是阿里巴巴的部框架,“就是把页面与Service之间的一些Servlet等公共的东西抽象出,提供相的服务以提高发效率(《接口之Webx介》—何晓峰 )”,可以看出,webx和统的servlet-action模式的HettpServlet基,其中的公用的抽象整理后,得到一个量的web发框架。

webx页面使用了velocity模板,WEB使用的是WEBX框架里面的TemplateAction,TemplateScreen,AbstractModule,TemplateControl,解决了操作和页面的跳。持久使用ibatis,Bean容器使用的是Spring。二 Webx的目构及重要的文件

由于webx是基于准的JavaEE Web用范,因此它的目构是我熟悉的B/S构。如:

 

其中,有个目是主要的;

1 src/main/java

2 src/main/webapp

先看src/main/webapp

里面主要放置了配置文件和模板文件。

所有配置文件都放在WEB-INF目下。除了准的web.xml以外,有了webx.xml、pipeline.xml和log4j.xml等几个文件。随着用变得复,会建其它的配置文件 。(也会用文件夹将配置文件管理起来,common文件夹)

web.xml:几乎是每一个web目都会有的配置文件,在webx框架下,只定义了一个核心的servlet:WebxController

    <filter>        <filter-name>mdc</filter-name>        <filter-class>com.alibaba.citrus.webx.servlet.SetLoggingContextFilter</filter-class>    </filter>    <filter>        <filter-name>webx</filter-name>        <filter-class>com.alibaba.citrus.webx.servlet.WebxFrameworkFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>mdc</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>webx</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>复制代码webx.xml:每个webx用,都需要有一个webx.xml配置文件。个文件定义了Webx所用到的所有services的配置。

pipeline.xml:即管道,它是由一个或多个“门Valve”构成的。可以看做webx框架的总控文件。

log4j.xml:日志系统配置文件。于程序的排错至关重要。

所有和前台展示有的文件,即模板,放在(webapp/)templates目下,vm后缀的Velocity的模板。

 

上面的文件下的文件和我的接口没有太大系,接口要的地方在下面的目中:

 

src/main/java/…/module。

Modules是基本程模块:包括screen,control,actionScreen — 用处理页面示的module,主要功能就是示一个页面Control — 和screen类似,但可以被的screen或layout引用,甚至可以跨越car用Action — 处理用户提交表的module复制代码Webx的页面布局以screen主,通screen查找其余的页面元素,然后通一系列查找查找页面元素Screen和control都可以有java类动,但不是必的,也就是可以先模板,后类 ,也可以只模板,不用构造类。。

三 Webx行的流程

在器里敲入http://localhost:8080/fuwuxian/login.htm,在Webx中发生了哪些事呢?

Webx按照以下流程行个求,得到求的页面。

•分析URL的成分,取得target:/login.vm
具体如下:

1)fuwuxianContext Path。服务器把个求交fuwuxian用接管。

2) login.htmServlet Path。在web.xml中把*.htm映射到Webx Controller Servlet,所以Webx Controller Servlet就接管了这个请求。

3) Webx Controller Servlet激活pipeline,而用AnalyzeURLValve分析/ login.htm是什么意思。根据webx默人的映射,/ login.htm被成/ login.vm。

2 根据target查找screen模板:/screen/login.vm

假如target的值:/xxx/yyy/ login.vm,那么,valve会:

1) 在/templates/screen目下,找到/xxx/yyy/login.vm模板。

2)依次查找screen类:

xxx.yyy. Login (如果找不到,下一个)

xxx.yyy.Default (如果找不到,下一个)

xxx.Default (如果找不到,下一个)

Default (如果找不到,下一个)

TemplateScreen (系统默screen,不可能找不到的)

3 行screen类,并渲染screen模板。

1) 如果存在layout布局,渲染layout,行screen类,并渲染screen模板

2) 根据target查找layout模板

4 渲染layout模板

5 渲染在layout模板中引用的两个control:

head.vm : 在head.car中查找/control/head.vm

bottom.vm :在bottom.car中查找/control/bottom.vm

通上面的步,一个求就得到响。

以上是webx的成构,页面布局,目构,以及行流程的介,希望正在珠联璧合的朋友有所帮助。不足或之处,敬批指正。

Webx的接口,参晓峰的《接口之Webx介》

posted @ 2011-12-26 16:20 牛啊牛 阅读(26) 评论(0) 编辑

Apple Mac OS X每日一技巧029:查询iPhone/iPad的序列号(Serial Number)和标识符(UDID/Identifier) 1.序列号比较好查,不用连电脑也可以,打开iOS设备的设置->通用->关于本机 里边就有

2.通过电脑查看的话可以打开iTunes,插上iOS设备,该设备的摘要里边有序列号,点击一下这一行就变成了标识符(UDID),Apple总是有些这些变态的查看方法。这个地方没法复制,序列号还好,UDID会抄死人的。

 

 


3.如果安装了XCode,可以看Windows->Organizer,这里边序列号和标识符都有,还可以复制,还有个优点是只要曾经连接过的设备这里都看的到,只要不删除就一直在里边。

 

posted @ 2011-12-26 16:19 牛啊牛 阅读(56) 评论(0) 编辑

大家不难看出来吧,wd=博客 这个博客 就是我输入的关键字,如果你想使用其它的关键字的话,只需要动太的修改wd的值就行了。

这时大家一定会这样想,我们是不是只要发一个Get请求,只要每次在我们自己的网站上查询时动态的发一个Ajax请求去访问这个地址就行了呢?是的,

但大家一个不要傻着去使用Http请求,因为这样的请求是从你的服务器发起的,当然百度肯定是会封你的。

我们需要怎么做才能避免这个问题呢?

那就只有一个方法了,使用Js,在客户端执行请求。因为Js是在客户端发起的,就算是百度封的话,那它封的是所有过量使用你网站的用户,相信百度不会傻到这点上吧。因为这样他们失去很多用户

所以这个方法应该 是成立的

但是大家都知道Js是不能跨越访问的,而百度又不可能给你跨越的接口,或者是权限,我们应该怎么办呢?

简单,我们上面也看到了,Baidu给我们的是一个Jsonp的数据格式,那么我们就可以直接使用Jsonp的方法去发起Ajax请求了,因为返回Jsop格式数据的JS是可以跨越访问的

大家一起来看下我的代码吧。

function FillUrls() {    var strdomin = $.trim($("#Text1").val());    var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'ShowDiv', 't': '1324113456725' };    $.ajax({        async: false,        url: "http://suggestion.baidu.com/su",        type: "GET",        dataType: 'jsonp',        jsonp: 'jsoncallback',        data: qsData,        timeout: 5000,        success: function (json) {        },        error: function (xhr) {            alert(xhr);        }    });}
复制代码
代码很简单大家一看应该就明白了,我只解释一下这句吧

 var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'ShowDiv', 't': '1324113456725' };

wd是我们要输入的关键字。

p  和就不用管了

cb是什么呢?是Ajax返回是直接调用的方法,个是百度返回的数据里面会执行方法进行调用,我们不用做任何的处理

只需要写一个方法接受数据就行了

function ShowDiv(strurls) {    var urls = strurls["s"];   }
复制代码
urls 这个就是我们需要的数据,我们一起来看看调用后返回的数据是什么样式的吧

ShowDiv({q:"博客",p:false,s:["博客中国","博客园","博客大巴","博客网","博客登陆","博客注册","博客搜索","博客群发","博客 新浪","博客群发大师"]});
复制代码
这就是百度返回的数据,我们只需要s后面的数据就行了,现在应该明白我写var urls = strurls["s"]; 这句的意思了吧。

在个时候大家可以自己试试了。

因为百度只返回的数据,所以我们还要做一个智能提供的框,当然也就可以自己定义样子了。先来看看这个框吧

 <div style="display: none; position: absolute;" id="allSitesBoxHdl" class="classlist"        onmouseover="this.style.display='block'" onmouseout="this.style.display='none'">        <ul id="allSitesBoxContent">        </ul>    </div>
复制代码
样式如下

View Code
#allSitesBoxHdl.classlist{    position: absolute;    background-color: #F5FBFF;    width: 256px;    border: 1px solid #C9E4F4;    top: 28px;    left: 0;    text-align: left;    font-size: 14px;    line-height: 30px;    padding: 1px;}#allSitesBoxHdl.classlist li{    display: inline;}#allSitesBoxHdl.classlist li.lis a{    text-decoration: none;    height: 30px;    width: 210px;    float: left;    padding-left: 8px;    color: #666;}#allSitesBoxHdl.classlist li.lis a:hover{    color: #016493;    background-color: #edf6fb;}#allSitesBoxHdl.classlist li.lis a:active{    color: #016493;    background-color: #edf6fb;}#allSitesBoxHdl.classlist li.lis input{    cursor: pointer;    color: #FF6600;    border-right: 1px solid #ccc;    border-bottom: 1px solid #ccc;    height: 22px;    margin: 4px;    line-height: 22px;    float: right;    background: #fff;}.wena{    color: #666;    font-size: 12px;    height: 30px;    line-height: 30px;    width: 250px;    float: left;}


第一步我们需要一个注册事件来完成控件的一些效果事件的绑定,当我们输入数据时才能的效果

方法如下

//注册对象的事件function Init() {    $("#allSitesBoxHdl")[0].style.display = "none";     $(":text").each(function () {        if ($(this)[0].getAttribute('url') == 'true') {//给所有的text加属性            $(this).bind("keyup", OnKeyup); //按键时            $(this).bind("mousedown", BoxShowUrls); //鼠标安下时            $(this).bind("mouseout", BoxHide); //鼠标离开时            $(this).bind("paste", OnPaste); //处理http;//            $(this)[0].setAttribute("autocomplete", "off");        }    });}
复制代码

这个方法这句 if ($(this)[0].getAttribute('url') == 'true') {//给所有的url=true属性的Text加效果

的意思是,我们所有引用这个网页的Text框中,只要有一个属性是url='true'的都会实现这个效果,也就是说我们只要把样式和Js文件引入一下,然后想让那具控件显示就直接添加一个属性

url='true'就行了,别的什么也不需要做了。是不是很方便啊。

一起来看看绑定方法的实现吧

下面是整个Js文件(这里还包括一个同时输入多个文本框的效果)

View Code
//-----------------------------------------实现多个输入框同时输入的方法-----------------------------------------------//得到控件IDfunction getid(id) {    return (typeof id == 'string') ? document.getElementById(id) : id};function getOffsetTop(el, p) {    var _t = el.offsetTop;    while (el = el.offsetParent) {        if (el == p) break;        _t += el.offsetTop    }    return _t};function getOffsetLeft(el, p) {    var _l = el.offsetLeft;    while (el = el.offsetParent) {        if (el == p) break;        _l += el.offsetLeft    }    return _l};var currentInput = null;//修改属性显示列表function BoxShow(e) {    var input = e;    if (!input.id) {        input = e.target ? e.target : e.srcElement;    }    currentInput = input;    FillUrls();    var box = getid("allSitesBoxHdl");    if (box.style.display == 'block' && currentInput.id == input.id) {        return;    }    box.style.left = (getOffsetLeft(input)) + 'px';    box.style.top = (getOffsetTop(input) + (input.offsetHeight - 1)) + 'px';    box.style.width = (input.offsetWidth - 4) + 'px';    box.style.display = 'block';}//显示列表function BoxShowUrls(e) {    var input = e;    if (!input.id) {        input = e.target ? e.target : e.srcElement;    }        BoxShow(e);}//给Input设置值function InputSetValue(val) {    var obj = currentInput;    obj.value = val;    if (obj.getAttribute('url') == 'true') {        var tags = document.getElementsByTagName('input');        for (var i = 0; i < tags.length; i++) {            if (tags[i].getAttribute('url') == 'true' && tags[i] != obj) {                tags[i].value = val;            }        }    }    BoxHide();}function BoxHide() {    if (getid("allSitesBoxHdl")) {        getid("allSitesBoxHdl").style.display = 'none';    }}//加载列表function FillUrls() {    var strdomin = $.trim($("#Text1").val());    var qsData = { 'wd': strdomin, 'p': '3', 'cb': 'ShowDiv', 't': '1324113456725' };    $.ajax({        async: false,        url: "http://suggestion.baidu.com/su",        type: "GET",        dataType: 'jsonp',        jsonp: 'jsoncallback',        data: qsData,        timeout: 5000,        success: function (json) {        },        error: function (xhr) {            alert(xhr);        }    });}function ShowDiv(strurls) {    var urls = strurls["s"];    var html = "";    if (urls) {        var urllist = urls;        var forlength = 0;        var stringcookie;        for (var i = urllist.length - 1; i >= 0; i--) {            var textval = urllist[i];            if ($.trim(textval) != "" && $.trim(textval) != "undefined") {                html += "<li class=\"lis\"><a href=\"javascript:InputSetValue('" + textval + "');\">" + textval + "</a></li><br/>";            }        }    } else {        html = "<li style='font-size: 12px;' >&nbsp;&nbsp;没有记录</li>";    }    if ($.trim(html) == "") {        html = "<li style='font-size: 12px;' >&nbsp;&nbsp;没有记录</li>";    }    getid("allSitesBoxContent").innerHTML = html;}//关闭输入法function closeIME(e) {    var obj = e.target ? e.target : e.srcElement;    obj.style.imeMode = 'disabled';}function OnPaste(e) {    var obj = e.target ? e.target : e.srcElement;    setTimeout("MoveHttp('" + obj.id + "')", 100);}//修正URLfunction MoveHttp(id) {    var val = getid(id).value;    val = val.replace("http://", "");    if (val[val.length - 1] == '/') {        val = val.substring(0, val.length - 1);    }    getid(id).value = val;}function OnKeyup(e) {    var obj = e.target ? e.target : e.srcElement;    setTimeout("addInput('" + obj.id + "')", 200);}//赋值function addInput(id) {    var obj = getid(id);    //如果是一个没有True的input不执行    if (obj.getAttribute('url') == 'true') {        if (obj.value.indexOf('。') > 0) {            obj.value = obj.value.replace('。', '.');        }        var tags = document.getElementsByTagName('input');        for (var i = 0; i < tags.length; i++) {            if (tags[i].getAttribute('url') == 'true' && tags[i] != obj) {                tags[i].value = obj.value;            }        }    }    FillUrls();}//注册对象的事件function Init() {    $("#allSitesBoxHdl")[0].style.display = "none";     $(":text").each(function () {        if ($(this)[0].getAttribute('url') == 'true') {//给所有的url=true属性的Text加效果            $(this).bind("keyup", OnKeyup); //按键时            $(this).bind("mousedown", BoxShowUrls); //鼠标安下时            $(this).bind("mouseout", BoxHide); //鼠标离开时            $(this).bind("paste", OnPaste); //处理http;//            $(this)[0].setAttribute("autocomplete", "off");        }    });}

免费发布信息
网页代码如下:

View Code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%22%3E%3Chtml xmlns="http://www.w3.org/1999/xhtml%22%3E%3Chead runat="server">    <title></title>    <link href="Scripts/StyleSheet.css" rel="stylesheet" type="text/css" />    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>    <script src="Scripts/JScript2.js" type="text/javascript"></script></head><body>    <form style="text-align: center" id="form1" runat="server">    <br />  <br />  <br />  <br />  <br />  <br />  <br />    <input style="width:500px;"  url="true" id="Text1" type="text" /><br/>       <input style="width:500px;" id="Text2" type="text" />    <div style="display: none; position: absolute;" id="allSitesBoxHdl" class="classlist"        onmouseover="this.style.display='block'" onmouseout="this.style.display='none'">        <ul id="allSitesBoxContent">        </ul>    </div>    <script type="text/javascript">        Init();</script>    </form></body></html>


好了我们一起浏览一下效果吧

posted @ 2011-12-26 15:40 牛啊牛 阅读(10) 评论(0) 编辑

打开VS2010 创建个windows服务应用程序!没有添加删除任何一行代码!然后按照下面的步骤

1. 将这个服务程序切换到设计视图
2. 右击设计视图选择“添加安装程序”
3. 切换到刚被添加的ProjectInstaller的设计视图
4. 设置serviceInstaller1组件的属性: 
    1) ServiceName = My Sample Service
    2) StartType = Automatic
5. 设置serviceProcessInstaller1组件的属性 
    1) Account = LocalSystem

这个时候 对着项目 右键 生成

6.以管理员权限 运行 Visual Studio x64 Win64 命令提示(2010)

后来以为是不能调用正确的 InstallUtil 。写了个批处理

echo.
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\installutil D:\快盘\cShape开发http://www.cnblogs.com/linuxredhat/admin/file://ws1/bin/Debug/WS1.exe >> InstallService.log
echo 服务安装完毕,启动服务. . .

在旁边生成的InstallService.log里依然是一样的提示免费发布信息

Microsoft(R) .NET Framework 安装实用工具版本 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.

 

posted @ 2011-12-26 15:36 牛啊牛 阅读(4) 评论(0) 编辑
免费发布信息免费发布供求信息免费发布分类信息