常用排序算法之JavaScript实现( 二 )

  • 平均情况:T(n) = O(n2)
  • 四、冒泡排序
    1)算法简介冒泡排序是一种简单的排序算法 。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来 。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成 。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 。2)算法描述和实现具体算法描述如下:
    • 比较相邻的元素 。如果第一个比第二个大,就交换它们两个;
    • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
    • 针对所有的元素重复以上的步骤,除了最后一个;
    • 重复步骤1~3,直到排序完成 。
    • functionbubbleSort(array){ if(Object.prototype.toString.call(array).slice(8, -1) === 'Array'){ varlen = array.length,temp; for(vari = 0;i < len - 1;i++){ for(varj = len - 1;j >= i;j--){ if(array[j] < array[j - 1]){ temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } returnarray; }else{ return'array is not an Array!'; }}

    • 3)算法分析
    • 最佳情况:T(n) = O(n)
    • 最差情况:T(n) = O(n2)
    • 平均情况:T(n) = O(n2)
    五、快速排序
    1)算法简介快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序 。2)算法描述和实现快速排序使用分治法来把一个串(list)分为两个子串(sub-lists) 。具体算法描述如下:
    • 从数列中挑出一个元素,称为 “基准”(pivot);
    • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边) 。在这个分区退出之后,该基准就处于数列的中间位置 。这个称为分区(partition)操作;
    • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序 。
    • //方法一functionquickSort(array,left,right){ if(Object.prototype.toString.call(array).slice(8, -1) === 'Array' && typeofleft === 'number' && typeofright === 'number'){ if(left < right){ varx = array[right],i = left - 1,temp; for(varj = left;j <= right;j++){ if(array[j] <= x){ i++; temp = array[i]; array[i] = array[j]; array[j] = temp; } } quickSort(array,left,i - 1); quickSort(array,i + 1,right); }; }else{ return'array is not an Array or left or right is not a number!'; }} varaaa = [3,5,2,9,1];quickSort(aaa,0,aaa.length - 1);console.log(aaa);

    • //方法二varquickSort = function(arr){if(arr.length <= 1){returnarr;}varpivotIndex = Math.floor(arr.length / 2);varpivot = arr.splice(pivotIndex,1)[0];varleft = [];varright = [];for(vari = 0;i < arr.length;i++){if(arr[i] < pivot){left.push(arr[i]);}else{right.push(arr[i]);}}returnquickSort(left).concat([pivot],quickSort(right));};3)算法分析
    • 最佳情况:T(n) = O(nlogn)
    • 最差情况:T(n) = O(n2)
    • 平均情况:T(n) = O(nlogn)
    六、堆排序
    1)算法简介堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法 。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点 。2)算法描述和实现具体算法描述如下: