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

来源:互联网 发布:富人俱乐部 知乎 编辑:程序博客网 时间:2024/05/26 12:58
<!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