写了一个姓名按照笔画排序的页面, 共享一下。
<
body onload
=
"
readDBFile();
"
>
<
table
>
<
tr
>
<
td
>
<
textarea id
=
"
srcStr
"
cols
=
"
60
"
rows
=
"
20
"
></
textarea
>
</
td
>
<
td
>
<
button onclick
=
"
getVal();
"
>
排序
>></
button
>
</
td
>
<
td
>
<
textarea id
=
"
descStr
"
cols
=
"
60
"
rows
=
"
20
"
readonly
=
"
true
"
></
textarea
>
</
td
>
</
tr
>
<
tr
>
<
td colspan
=
"
3
"
>
不能排序的姓名有:
<
font color
=
"
red
"
><
a id
=
"
descript
"
></
a
></
font
>
</
td
>
</
tr
>
<
tr
>
<
td colspan
=
"
3
"
>
<
font color
=
"
green
"
>
说 明
<
br
>
一、姓按字的画数多少排列。同画数内的姓字按起笔横、竖、撇、捺、折的顺序排列,画数和笔形相同的字,按字形结构,先左右形字,再上下形字,后整体字。如:同是八画的字,“明”在先,“冒”次之,“国”在后。
<
br
>
二、姓字相同的依次看名的第二、第三字,先看画数,后看起笔顺序,再看笔形。两个字的姓名,视为第二个字为零画。
<
br
>
三、复姓字也按第一个字笔画画数多少排列,笔画相同的按笔形顺序排列。
<
br
>
四、姓名与姓名之间用半角逗号隔开。如:张三,李四
</
font
>
</
td
>
</
tr
>
</
table
>
</
body
>
<
script
>
var
ht
=
new
HashTable();
var
errorNameArr
=
new
Array();
var
nameArr
=
new
Array();
function
readDBFile()

...
{
var xingStr = getXingStr();
var xingArr = xingStr.split(",");
var xingLen = xingArr.length;
for(var i=0;i<xingLen;i++)

...{
var e = new HashTableElement();
e.key = xingArr[i];
e.code = i;
ht.Insert(e);
}
}
function
getVal()

...
{
var xingSrc = document.all.srcStr.value;
if(xingSrc != "")

...{
var srcArr = xingSrc.split(",");
var srcLen = srcArr.length;
var errorNum = 0;
var nameNum = 0;
for(var i=0;i<srcLen;i++)

...{
var seq ;
if(srcArr[i].length >= 3 )

...{//先判断三个字的姓
seq = ht.Search(srcArr[i].substring(0,3));
if(seq == "" || seq == null)

...{
seq = ht.Search(srcArr[i].substring(0,2));
if(seq == "" || seq == null)

...{
seq = ht.Search(srcArr[i].substring(0,1));
}
}
}
else if(srcArr[i].length > 1 && srcArr[i].length <= 2 )

...{//先判断两个字的姓
seq = ht.Search(srcArr[i].substring(0,2));
if(seq == "" || seq == null)

...{
seq = ht.Search(srcArr[i].substring(0,1));
}
}
else if(srcArr[i].length == 1)

...{
seq = ht.Search(srcArr[i].substring(0,1));
}
if(seq == "" || seq == null)

...{
errorNameArr[errorNum] = srcArr[i];
errorNum++;
}
else

...{
var xingObj = new Object();
xingObj.name = srcArr[i];
xingObj.seq = seq + srcArr[i].length;
//nameArr[nameNum] = new Object();
nameArr[nameNum] = xingObj;
nameNum++;
}
}
//把排序后的姓名放到desc中
var nameNewArr = ShellSort(nameArr);
if(nameNewArr != null)

...{
var newLen = nameNewArr.length;
var descStr = ""
for(var i=0;i<newLen;i++)

...{
descStr = descStr + nameNewArr[i].name + ",";
}
document.all.descStr.value = descStr.substring(0,descStr.length-1);
}
//把不能排序的姓名列出来
if(errorNameArr != null)

...{
var newLen = errorNameArr.length;
var descStr = ""
for(var i=0;i<newLen;i++)

...{
descStr = descStr + errorNameArr[i] + ",";
}
document.all.descript.innerHTML = descStr.substring(0,descStr.length-1);
}
}
}

function
ShellSort(arr)
...
{ //插入排序->希儿排序
var st = new Date();
var increment = arr.length;

do ...{
increment = (increment/3|0) + 1;
arr = ShellPass(arr, increment);
}
while (increment > 1)
status = (new Date() - st) + ' ms';
return arr;
}

function
ShellPass(arr, d)
...
{ //希儿排序分段执行函数
var temp, j;

for(var i=d; i<arr.length; i++) ...{

if((arr[i].seq) < (arr[i-d].seq)) ...{
temp = arr[i]; j = i-d;

do ...{
arr[j+d] = arr[j];
j = j-d;
}
while (j>-1 && (temp.seq) < (arr[j].seq));
arr[j+d] = temp;
}//endif
}
return arr;
}
function
HashTableElement()

...
{
this.key = null;
this.code = null;
}
function
HashTable()

...
{
this.ht = new Array(4099);
this.Search = function(keyword)

...{
var arr = this.ht[keyword%4099];
if(typeof(arr) != "undefined")

...{
for(i = 0; i < arr.length; i ++)

...{
if(arr[i].key == keyword) return arr[i].code;
}
}
return null;
}
this.Insert = function(e)

...{
var arr = this.ht[e.key%4099];
if(typeof(arr) == "undefined")

...{
arr = new Array();
arr[0] = e;
this.ht[e.key%4099] = arr;
}
else

...{
arr[arr.length] = e;
}
}
}
function
getXingStr()

...
{
return "乙"
+ "丁,七,卜,刀,刁"
+ "干,于,土,大,万,万俟,寸,上官,山,么,千,广,弓,卫,马子车,习"
+ "丰,王,天,井,元,韦,云,专,扎,木,支,不,太叔,尤,车,区牙,比,瓦,戈,长孙,巨,日,贝,牛,毛,仁,仉,仇,化,从,丹,今,仓,公,公西,公羊,公冶,公良,公孙,乌,殳,勾,凤,卞,六,文,方,亢,火,计,尹,孔,巴,邓,双,毋,水"
+ "玉,未,正,甘,艾,古,节,左,左丘,厉,石,布,龙,平,东,东门,东郭,东方,占,卢,帅,归,申,申屠,叶,田,由冉,央,史,只,生,付,丘,白,仝,丛,令狐,印,包,乐,乐正,邝,立,玄,闪,兰宁,冯,司,司徒,司寇,司空,司马,弘,召,尼,皮,边,尕"
+ "耒,邢,戎,吉,巩,朴,权,亚,西,西门,有,百,百里,达,成,夹谷,匡,扬,毕,过,师,曲,吕,则,肉,年,朱,竹,乔,伍,伏,仲,仲孙,任,华,仰,伉伊,向,后,全,危,多,邬,庄,刘,齐,衣,充,闯,羊,羊舌,羊角,关,米,江,池汝,汤,宇文,安,军,冰,祁,许,农,寻,那,阮,阳,阴,牟,买,红,纪,孙"
+ "寿,麦,玛,远,运,赤,贡,却,芮,花,苍,严,克,劳,苏,杜,巫,巫马,李,杨,甫,邴,束,励,邳,来,扶,连轩辕,步,肖,时,吴,旷,员,别,岑,秀,利,邱,何,伯,佟,佘,余,谷,邸,狄,邹,言,享,库,应,辛,闵,怀,忻,况,冷,汪,沙,沃,沧,汲,沈,完,宋,罕,良,初,迟,张,陆,阿,陈,邵,邰,纳"
+ "青,武,幸,苗,苟,苑,范,茅,林,松,杭,郁,郏,拓拔,欧,欧阳,郅,卓,虎,尚,国,昌,畅,明,果,易,典,呼,呼延,迪,岩,罗,帕,凯,贯,牧,季,和,竺,佴,岳,侬,金,郄,周,鱼,庞,庚,底,府,於,郑,羌,单,单于,冼,法,宗,宝,宠,官,宛,空,宓,郎,房,居,屈,练,经,孟,终"
+ "封,项,赵,贲,郝,荆,茜,草,荀,荣,胡,茹,药,柯,查,相,柏,柳,郦,咸,南,南门,,南宫,战,是,贵,蚁,哈,钟,钟离,钦,钮,郜,种,秋,笃,段,段干,修,皇甫,禹,侯,律,须,俞,郗,郤,昝,逄,饶,施,恽,恰,闻,闻人,闾丘,姜,娄,首,养,洪,宣,宦,宫,冠,祖,祝,费,胥,姚,贺,勇,羿,骆,骈"
+ "秦,敖,班,载,袁,都,耿,聂,莫,莘,晋,桂,桓,格,索,栗,贾,夏,夏侯,热,原,顾,列,顿,柴,党,晁,晏,哨,钱,铁,倪,皋,徐,殷,爱,奚,翁,卿,栾,高,郭,席,唐,竞,郯,浩,凌,资,益,浦,海,涂,浣,家,宾,容,宰,宰父,诸,诸葛,谈,郎,展,陶,姬,通,能,桑"
+ "排,理,堵,教,黄,菅,萧,萨,梅,曹,戚,龚,盛,常,晨,鄂,唯,啜,崔,崇,铫,银,笪,符,第五,盘,庹,麻,瘐,康,鹿,章,商,阎,盖,淳于,淡,梁,梁丘,寇,宿,谌,扈,逮,尉,尉迟,屠,隋,隆,续,绳,巢"
+ "琴,越,喜,彭,斯,葛,董,蒋,蒉,韩,辜,森,惠,覃,粟,揭,辉,戢,景,喻,黑,嵇,程,税,傅,焦,储,舒,鲁,赓,童,羡,普,尊,曾,湛,温,滑,游,富,禄,谢,强,疏,隗,缑"
+ "鄢,靳,蓝,蒯,蓟,蓬,蒲,蒙,楚,楼,裘,赖,甄,雷,訾,虞,路,筱,简,微生,詹,鲍,解,廉,裔,靖,新,雍,阙,慎,满,溥,窦,福,褚"
+ "赫,赫连,綦,綦母,慕,慕容,蔡,蔚,蔺,臧,裴,管,鲜于,雒,廖,韵,端木,阚,漆,漆雕,赛,谭,谯,暨,翟,熊,缪"
+ "麴,燕,樊,暴,颛孙,墨,稽,黎,腾,颜,翦,潘"
+ "薛,薄,融,霍,遽,冀,穆,衡,澹台"
+ "戴,鞠,檀,糜,濮,濮阳,蹇"
+ "瞿"
+ "壤驷,酆,耀,籍"
+ "露,夔"
+ "囊,鬻";
}
</
script
>

































































































































































































































































