//它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来 functionbubbleSort(arr) { var temp for (var i = 0; i < arr.length; i++) { for (var j = 0; j < arr.length - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j + 1] arr[j + 1] = arr[j] arr[j] = temp } } } return arr }
选择排序 – 时间复杂度O(n^2)
//选择排序 //思路:找到最小值的下标记下来,再交换 functionselectionSort(arr) { var min, temp for (var i = 0; i < arr.length; i++) { min = i for (var j = i + 1; j < arr.length; j++) { if (arr[min] > arr[j]) min = j } if (min != i) { temp = arr[i] arr[i] = arr[min] arr[min] = temp } } return arr }
插入排序 – 时间复杂度O(n^2)
//插入排序 //假定当前元素之前的元素已经排好序,先把自己的位置空出来, //然后前面比自己大的元素依次向后移,直到空出一个"坑", //然后把目标元素插入"坑"中 functioninsertSort(arr) { var temp for (var i = 0; i < arr.length; i++) { var temp = arr[i] for (var j = i; j > 0 && temp < arr[j - 1]; j--) { arr[j] = arr[j - 1] } arr[j] = temp } return arr }
快速排序 – 时间复杂度O(nlogn)
//(1)在数据集之中,选择一个元素作为"基准"(pivot)。 //(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。 //(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 functionquickSort(arr) { if (arr.length <= 1) { return arr } var pivotIndex = Math.floor(arr.length / 2) var pivot = arr.splice(pivotIndex, 1)[0] var left = [] var right = [] for (var i = 0; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]) } else { right.push(arr[i]) } } return quickSort(left).concat([pivot], quickSort(right)) }
字符串反转 – 时间复杂度O(logN)
functioninverse(s) { var arr = s.split('') var i = 0, j = arr.length - 1 while (i < j) { var t = arr[i] arr[i] = arr[j] arr[j] = t i++ j-- } return arr.join('') }
//10进制到26进制的转换 functionconvert(num) { var s = '' while (num > 0) { var m = num % 26 if (m === 0) { m = 26 } s = (m + 9).toString(36) + s num = (num - m) / 26 } return s.toUpperCase() } console.log(convert(50))