functionbubbleSort(arr){const len = arr.length;if(!len || len <2)return arr;for(let i =0; i < len -1; i ++){for(let j =0; j < len - i -1; j++){if(arr[j]> arr[j+1]){[arr[j], arr[j +1]]=[arr[j +1], arr[j]]}}}return arr;}
// 构建大根堆functionheapify(arr, n, i){// 初始化最大元素为根节点let largest = i;// 左子节点let left =2* i +1;// 右子节点let right =2* i +2;// 如果左子节点大于根节点,更新最大元素if(left < n && arr[left]> arr[lagest]){
largest = left;}// 如果右子节点大于最大元素,更新最大元素if(right < n && arr[right]> arr[largest]){
largest = right;}// 如果最大元素不是根节点,交换根节点和最大元素if(largest !== i){swap(arr, i, largest);// 递归调整被交换的子树heapify(arr, n, largest);}}functionswap(arr, i, j){let tmp = arr[i];
arr[i]= arr[j];
arr[j]= tmp;}functionheapSort(arr){const len = arr.length;if(len <2)return arr;// 构建大根堆for(let i = len/2-1; i >=0; i--){heapify(arr, len, i);}// 从堆中取出元素,排序完成for(let i = len -1; i >=0; i--){swap(arr,0, i);heapify(arr, i,0);}}