您的位置:首页 > Web前端 > JavaScript

javascript 冒泡排序法 插入排序法 选择排序法 归并排序法 堆排序法

2011-07-18 14:23 507 查看
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sort</title>
<script type="text/javascript">
var arr=new Array();
//产生十个随机数
for(var i=0;i<10;i++){
 arr.push(parseInt(Math.random()*100));
}
document.writeln(arr);

 /**
 * 冒泡排序法
 * @param arr 数组
 * @return 排序后的数组
 */
var BubbleSort=function(arr){
 var arrLen=arr.length;
 for(var i=0;i<arrLen;i++){
  for(var j=arrLen-1;j>i;j--){
   if(arr[j]<arr[j-1]){
    temp=arr[j];
    arr[j]=arr[j-1];
    arr[j-1]=temp;
   }
  }
 }
 return arr;
}

 /**
 * 插入排序法
 * @param arr 数组
 * @return 排序后的数组
 */
var InsertSort=function(arr){
 var arrLen=arr.length;
   for(var i=1;i<arrLen;i++){
  temp = arr[i];
  for(var j=i ; j>0 && temp < arr[j-1] ; j--){
     arr[j]=arr[j-1];
   }  
  arr[j]=temp;   
 } 
 return arr;
}

 /**
 * 选择排序法
 * @param arr 数组
 * @return 排序后的数组
 */
var SelectSort=function(arr){
 var arrLen=arr.length;
 for(var i=0;i<arrLen;i++){
  var minIndex = i; 
  for(var j=i;j<arrLen;j++){
   if(arr[minIndex]>arr[j]) {
    minIndex=j;
    key = arr[i];
    arr[i] = arr[minIndex];
    arr[minIndex] = key; 
   }
  }
 }
 return arr;
}

 /**
 * 归并排序法合并
 * @param arr 数组
 * @return 合并的数组
 */
var Merge=function(left, right) {  
 var re = [];  
 while(left.length > 0 && right.length > 0) {  
  if(left[0] < right[0]) {  
   re.push(left.shift());  
  } else {  
   re.push(right.shift());  
  }  
 }  
return re.concat(left).concat(right);  
} 
 /**
 * 归并排序法
 * @param arr 数组
 * @return 排序后的数组
 */
var MergeSort=function(arr){
 if(arr.length == 1) return arr;  
 var arrLen=arr.length;
 var m = Math.floor(arr.length / 2);  
 var left = arr.slice(0, m);  
 var right = arr.slice(m);  
 return Merge(MergeSort(left), MergeSort(right));  
}

 /**
 * 堆排序法
 * @param arr 数组
 * @return 排序后的数组
 */
   var HeapSort=function(items)
   {
   items = array2heap(items); //将数组转化为堆
   for(var i = items.length - 1; i >= 0; i--)
   {
      items = swap(items, 0, i); //将根和位置i的数据交换(用于将最大值放在最后面)
      items = moveDown(items, 0, i - 1); //数据交换后恢复堆的属性
   }
   return items;
   }
   /**
 * 将数组转换为堆
 * @param arr 数组
 * @return 堆
 */
   var array2heap=function(items)
   {
   for(var i = Math.ceil(items.length / 2) - 1; i >= 0; i--)
   {
      items = moveDown(items, i, items.length - 1); //转换为堆属性
   }
   return items;
   }
   /**
 * 转换为堆
 * @param items 数组
 * @param first 第一个元素
 * @param last 最后一个元素
 * @return 堆
 */
   var moveDown=function(items, first, last)
   {
   var largest = 2 * first + 1;
   while(largest <= last)
   {
      if(largest < last && items[largest] < items[largest + 1])
      {
             largest++;
      }
      if(items[first] < items[largest])
      {
             items = swap(items, first, largest); // 交换数据
             first = largest;   //往下移
             largest = 2 * first + 1;
      }
      else
      {
             largest = last + 1; //跳出循环
      }
   }
   return items;
   }
   /**
 * 交换数据
 * @param items 数组
 * @param index1 索引1
 * @param index2 索引2
 * @return 数据交换后的数组
 */
   var swap=function(items, index1, index2)
   {
   var tmp = items[index1];
   items[index1] = items[index2];
   items[index2] = tmp;
   return items;
   }

var arr =HeapSort(arr);
document.writeln("<br>");
document.writeln(arr);
</script>
</head>

<body>
</body>
</html>


排序算法介绍和使用场景:

http://blog.csdn.net/myjava_024/article/details/3220319

http://en.wikipedia.org/wiki/Sorting_algorithm#Merge_sort
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: