堆排序
堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了
归并排序&#xff0c;其的基本思路就是将数组分成二组A&#xff0c;B&#xff0c;如果这二组组内的数据都是有序的&#xff0c;那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了&#xff1f; 可以将A&#xff0c;B组各自再分成二组。依次类推&#xff0c;当分出来的小组只有一个数据时&#xff0c;可以认为这个小组组内已经达到了有序&#xff0c;然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列&#xff0c;再合并数列就完成了归并排序。 对于一字给定的记录&#xff0c;通过一趟排序后&#xff0c;将原序列分为两部分&#xff0c;其中前一部分的所有记录均比后一部分的所有记录小&#xff0c;然后再一次对前后两部分的记录进行快速排序&#xff0c;递归该过程&#xff0c;指导序列中所有记录均有序为止。arr &#61; [20,50,20,40,6,878,70,10,80,30,60,9,44];console.log("排序之前&#xff1a;" &#43; arr);heapSort(arr);console.log("排序之后&#xff1a;" &#43; arr);function heapSort(arr) {var end &#61; arr.length -1;for (var i &#61; parseInt(arr.length/2) -1; i >&#61; 0; i--) {heapAdjust(arr,i,end);}while(end >&#61; 0) {swap(arr,0,end--); //将堆顶元素与尾节点交换后&#xff0c;长度减1&#xff0c;尾元素最大heapAdjust(arr,0,end); //再次对堆进行调整}}function heapAdjust(arr,i,end) {var left &#61; 2*i&#43;1, right, flag;while(left <&#61; end){ //判断当前父节点有无左节点&#xff08;即有无孩子节点&#xff0c;left为左节点&#xff09;right &#61; left &#43;1;flag &#61; left;if (right <&#61; end && arr[left]
归并排序
// 归并排序myarr&#61;[2,43,4,7,4,766,7,3,324,54,5455,89];console.log("归并排序前&#xff1a;" &#43; myarr);mergeSort(myarr, myarr.length);console.log("归并排序后&#xff1a;" &#43; myarr);function mergeSort(arr, len) {var tmpArr &#61; new Array(len);mergeSortDevide(arr,0,len-1,tmpArr);tmpArr &#61; [];return true;}function mergeSortDevide(arr, first, last, tempArr) {if (first
快速排序
// 快速排序function quickSort(arr, low, high) {var i,j,index;if (low>high)return;i &#61; low;j &#61; high;index &#61; arr[i];while(i