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
相关文章推荐
- PHP实现几种基本排序算法--冒泡排序法,快速排序法,选择排序法,插入排序法
- Golang实现的通用快速排序法,冒泡排序法,插入排序法,选择排序法
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
- 【java】冒泡排序法、选择排序法、插入排序法
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
- 冒泡排序法、选择排序法和插入排序法的排序过程
- javascript 排序 冒泡排序法 + 插入排序法
- 常用排序法之一 ——冒泡排序法和选择排序法
- Java中冒泡排序法,选择排序法,反转排序法代码
- 数字排序问题(逆序,顺序)(冒泡排序法,选择排序法)
- 编程基础知识点之排序:冒泡排序法,选择排序法
- 经典数组排序方法------选择排序法,冒泡排序法
- 排序算法(JAVA实现):冒泡排序法和插入排序法
- 冒泡排序法与选择排序法图例详解
- js基本算法--冒泡排序法、快速排序法、插入排序法、二分查找法(递归、非递归)
- 选择排序法和冒泡排序法
- 冒泡排序法和选择排序法
- 冒泡排序法和选择排序法
- 选择排序法与冒泡排序法的区别