排序
<script
language="javascript"
type="text/javascript"
src="../style/TableSorter.js"></script>
<script
language="javascript"
type="text/javascript">
//实现排序
window.onload = function()
{
new TableSorter("tb1"); //表格的id
}
</script>
//Author : 狼Robot
//Contact :robot@k2046.cn
//Date :2008-04-19
//Explain : 使Table可以点击排序.
/*使用说明 :
方法1:
new TableSorter("tb1");
效果:
id为tb1的table的第一行任意单元格都可以点击进行排序.
方法2:
new TableSorter("tb1", 0, 1, 3);
效果:
id为tb1的table的第一行0,1,3单元格可以进行点击排序.
*/
function TableSorter(table)
{
this.Table =
this.$(table);
if(this.Table.rows.length <= 1)
{
return;
}
this.Init(arguments);
}
//以下样式针对表头的单元格.
TableSorter.prototype.NormalCss= "NormalCss";//没有执行排序时的样式.
TableSorter.prototype.SortAscCss= "SortAscCss";//升序排序时的样式.
TableSorter.prototype.SortDescCss= "SortDescCss";//降序排序时的样式.
//初始化table的信息和操作.
TableSorter.prototype.Init = function(args)
{
this.ViewState = [];
for(var
x = 0; x < this.Table.rows[0].cells.length; x++)
{
this.ViewState[x] =
false;
}
if(args.length> 1)
{
for(var
x = 1; x < args.length; x++)
{
if(args[x] >
this.Table.rows[0].cells.length)
{
continue;
}
else
{
this.Table.rows[0].cells[args[x]].onclick =
this.GetFunction(this,"Sort",args[x]);
this.Table.rows[0].cells[args[x]].style.cursor =
"pointer";
}
}
}
else
{
for(var
x = 0; x < this.Table.rows[0].cells.length; x++)
{
this.Table.rows[0].cells[x].onclick =
this.GetFunction(this,"Sort",x);
this.Table.rows[0].cells[x].style.cursor =
"pointer";
}
}
}
//简写document.getElementById方法.
TableSorter.prototype.$ = function(element)
{
return document.getElementById(element);
}
//取得指定对象的脱壳函数.
TableSorter.prototype.GetFunction= function(variable,method,param)
{
return function()
{
variable[method](param);
}
}
//执行排序.
TableSorter.prototype.Sort = function(col)
{
var SortAsNumber =
true;
for(var
x = 0; x < this.Table.rows[0].cells.length; x++)
{
this.Table.rows[0].cells[x].className =
this.NormalCss;
}
var Sorter = [];
for(var
x = 1; x < this.Table.rows.length; x++)
{
Sorter[x-1] = [this.Table.rows[x].cells[col].innerHTML, x];
SortAsNumber = SortAsNumber &&
this.IsNumeric(Sorter[x-1][0]);
}
if(SortAsNumber)
{
for(var
x = 0; x < Sorter.length; x++)
{
for(var
y = x + 1; y < Sorter.length; y++)
{
if(parseFloat(Sorter[y][0]) < parseFloat(Sorter[x][0]))
{
var tmp = Sorter[x];
Sorter[x] = Sorter[y];
Sorter[y] = tmp;
}
}
}
}
else
{
Sorter.sort();
}
if(this.ViewState[col])
{
Sorter.reverse();
this.ViewState[col] =
false;
this.Table.rows[0].cells[col].className =
this.SortDescCss;
}
else
{
this.ViewState[col] =
true;
this.Table.rows[0].cells[col].className =
this.SortAscCss;
}
var Rank = [];
for(var
x = 0; x < Sorter.length; x++)
{
Rank[x] =
this.GetRowHtml(this.Table.rows[Sorter[x][1]]);
}
for(var
x = 1; x < this.Table.rows.length; x++)
{
for(var
y = 0; y < this.Table.rows[x].cells.length; y++)
{
this.Table.rows[x].cells[y].innerHTML = Rank[x-1][y];
}
}
this.OnSorted(this.Table.rows[0].cells[col],
this.ViewState[col]);
}
//取得指定行的内容.
TableSorter.prototype.GetRowHtml= function(row)
{
var result = [];
for(var
x = 0; x < row.cells.length; x++)
{
result[x] = row.cells[x].innerHTML;
}
return result;
}
TableSorter.prototype.IsNumeric= function(num)
{
return /^\d+(\.\d+)?$/.test(num);
}
//可自行实现排序后的动作.
TableSorter.prototype.OnSorted= function(cell, IsAsc)
{
return;
}
分享到:
相关推荐
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
提供五种排序算法的C++实现方法,输入(待排序元素个数、排序码上界(采用随机生成数组方式)),可选择输出(原始数组、排序后数组、原始数组有序度和无序度、排序过程中数据比较次数与数据移动次数、数组中出现...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
21、折半插入排序 22、21、折半插入排序 22、冒泡排序 21、折半插入排序 22、冒泡排序 23、快速排序 21、折半插入排序 22、冒泡排序 23、快速排序 24、简单选择排序 21、折半插入排序 22、冒泡排序 23、快速排序 24...
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
1.内部排序:使用8种内部排序算法(冒泡排序、插入排序、选择排序、希尔排序、快速排序、归并排序、基数排序、堆排序),对出版社信息按照指定关键字进行排序,分析其时空复杂度(在实验报告的总结与思考中会有相应...
此案例难度系数4,属于Scratch高级编程,插入排序相对而言比选择排序和冒泡排序理解起来要难一点,但是还是相对简单的排序,尤其是对少量元素排序的时候,效率较高;综合考查说话、随机数、无限循环(条件循环)、...
1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组不同的输入数据作比较;比较...
实验项目:排序方法的实验比较 排序方法是数据处理的最基本和最重要的操作。其目的是将一组“无序”的 记录序列调整为“有序”的记录序列。 实验题目:排序方法的实现与实验比较 实验内容: 实现一组经典的排序...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
printf("\t1: 插入排序\n"); printf("\t2: 冒泡法排序\n"); printf("\t3: 快速排序\n"); printf("\t4: 直接选择排序\n"); printf("\t5: 堆排序\n"); printf("\t6: 归并排序\n"); printf("\t7: 希尔排序\n"); ...
选择排序 冒泡排序 插入排序 合并排序 快速排序算法原理及代码实现 不同排序算法时间效率的经验分析方法 验证理论分析与经验分析的一致性 当面临巨大数据量的排序的时候,还是优先选择合并排序算法和快速排序算法。...
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
插入排序,选择排序,基数排序,冒泡排序的C++实现
冒泡排序详解,简单而详细的讲清楚了,什么是冒泡排序。 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首...
1、链表排序 [问题描述] 建立一个...设计要求:利用随机函数产生10个样本,每个样本有20000随机整数,利用直接插入排序、希尔排序,冒泡排序、快速排序、选择排序、堆排序,归并排序,基数排序八种排序方法进行排序
利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且 (1) 统计每一种排序上机所花费的时间。 (2) 统计在完全正序,完全逆序情况下记录的比较...
1) 分别采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序,实现这批数据的排序,并把排序后的结果保存在不同的文件中。 2) 统计每一种排序方法的性能(以上机运行程序所花费的时间...