<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
<style>
fieldset {
font-size:12px;
padding:10px;
width:80%;
margin:auto;
}
input {
font-size:12px;
font-family:Tahoma;
}
</style>
<title>排序</title>
<h3 align="center">排序</h3>
<fieldset>
<legend>插入排序</legend>
<p><b>直接插入排序</b>
请输入一段要排序的字符,用半角逗号隔开
<input name=insert type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(InsertSort(insert.value.split(',')));">
<p><b>希儿排序</b><br>
<input name=Shell type=text size=100 value="g,v,u,f,p,o,i,a,t,j">
<br><input type=button value=" 排序 " onclick="alert(ShellSort(Shell.value.split(',')));">
</fieldset>
<p>
<fieldset>
<legend>交换排序</legend>
<b>冒泡排序</b><br>
<input name=bubble type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(BubbleSort(bubble.value.split(',')));">
<p><b>快速排序<br>
</b>
<input name=quick type=text size=100 value="3,1,5,4,6">
<br><input type=button value=" 排序 " onclick="alert(QuickSortDemo(quick.value.split(',')));">
</fieldset>
<p>
<fieldset>
<legend>选择排序</legend>
<b>直接选择排序</b><br>
<input name=select1 type=text size=100 value="g,v,u,f,p,o,i,a,t,j,e,l,k">
<br><input type=button value=" 排序 " onclick="alert(SelectSort(select1.value.split(',')));">
<p>... ...
</fieldset>
<script>
function InsertSort(arr) { //插入排序->直接插入法排序
var st = new Date();
var temp, j;
for(var i=1; i<arr.length; i++) {
if((arr[i]) < (arr[i-1])) {
temp = arr[i];
j = i-1;
do {
arr[j+1] = arr[j];
j--;
}
while (j>-1 && (temp) < (arr[j]));
arr[j+1] = temp;
}//endif
}
status = (new Date() - st) + ' ms';
return arr;
}
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]) < (arr[i-d])) {
temp = arr[i]; j = i-d;
do {
arr[j+d] = arr[j];
j = j-d;
}
while (j>-1 && (temp) < (arr[j]));
arr[j+d] = temp;
}//endif
}
return arr;
}
function BubbleSort(arr) { //交换排序->冒泡排序
var st = new Date();
var temp;
var exchange;
for(var i=0; i<arr.length; i++) {
exchange = false;
for(var j=arr.length-2; j>=i; j--) {
if((arr[j+1]) < (arr[j])) {
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
exchange = true;
}
}
if(!exchange) break;
}
status = (new Date() - st) + ' ms';
return arr;
}
function QuickSortDemo(arr) {
var st = new Date();
var result = QuickSort(arr);
status = (new Date() - st) + ' ms';
return result;
}
function QuickSort(arr) { //交换排序->快速排序
if (arguments.length>1) {
var low = arguments[1];
var high = arguments[2];
} else {
var low = 0;
var high = arr.length-1;
}
if(low < high){
// function Partition
var i = low;
var j = high;
var pivot = arr[i];
while(i<j) {
while(i<j && arr[j]>=pivot)
j--;
if(i<j)
arr[i++] = arr[j];
while(i<j && arr[i]<=pivot)
i++;
if(i<j)
arr[j--] = arr[i];
}//endwhile
arr[i] = pivot;
// end function
var pivotpos = i; //Partition(arr,low,high);
QuickSort(arr, low, pivotpos-1);
QuickSort(arr, pivotpos+1, high);
} else
return;
return arr;
}
/*function Partition(arr, i, j) { //快速排序, 对待排序的数组进行划分
var pivot = arr[i];
while(i<j) {
while(arr[j]>=pivot)
j--;
if(i<j)
arr[i++] = arr[j];
while(arr[i]<=pivot)
i++;
if(i<j)
arr[j--] = arr[i];
}
arr[i] = pivot;
return arr;
}*/
function SelectSort(arr) { //选择排序->直接选择排序
var st = new Date();
var temp;
for(var i=0; i<arr.length; i++) {
var k = i;
for(var j=i+1; j<arr.length; j++) {
if((arr[j]) < (arr[k]))
k = j;
}
if (k != i){
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
status = (new Date() - st) + ' ms';
return arr;
}
function unicode(str) {//求字符串的unicode码
var uni=0;
for(var i=0; i<str.length; i++){
uni += str.charCodeAt(i)/6553.5 * Math.pow(10, str.length-i);
}
return uni;
}
</script>
</BODY>
</HTML>