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