几种排序方法


将以下代码保存为网页,运行可看到效果:

<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>


 

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3