大一蓝桥杯之后到现在不写算法已经好久了,笔试吃大亏.
总结一些常用的.
- 排序
图源:https://images0.cnblogs.com/blog2015/601481/201503/301143539671643.png
1.1 最简单的javascript 自带的排序.//改变原数组
元素按照转换为的字符串的各个字符的Unicode位点进行排序。
let arr = [1, 3, 2, 4, 3, 2, 6];
//sort()
arr.sort();
console.log(arr);
arr.reverse()//大 => 小
console.log(arr);
sort([compareFunction]) //ie5.5
arr.sort(
(a, b) => {
if (a > b) {
return 1;
} else if (a < b) {
return -1;
}
return 0;
}
);
不管你咋写大于0的就是a>b
1.2 快速排序(如果是要不改变数组的话可以
let arr2 = [];
arr.forEach((v, i) => {
arr2[i] = v
});)
//foreach IE9
function quicksort(arr, left, right) {
if (left < right) {
let mid = getMid(arr, left, right);
quicksort(arr, left, mid - 1);
quicksort(arr, mid + 1, right);
}
return arr;
}
function getMid(arr, left, right) {
let tmp = arr[left]
while (left < right) {
while (left < right && arr[right] >= tmp) {
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] <= tmp) {
left++
}
arr[right] = arr[left];
}
arr[left] = tmp
return left;
}
quicksort(arr, 0, arr.length - 1)
console.log(arr);
</script>
1.3 冒泡排序.(气泡)
function bubbleSort(arr) {
let tmp;
for (var i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
tmp = arr[j]
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
return arr;
}
1.4 直接插入排序(扑克牌)
function insertSort(arr) {
var value;
for (var i = 0; i < arr.length; i++) {
value = arr[i]; //储存当前的值
for (var j = i - 1; j > -1 & arr[j] > value; j--) {
// 当已排序部分的当前元素大于value,
// 就将当前元素向后移一位,再将前一位与value比较
// 直到value小于比较的值或者到数组最开头停止
arr[j + 1] = arr[j];
}
arr[j + 1] = value;
}
return arr;
}
1.5 选择排序
function selectSort(arr) {
var min;
var minIndex;
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
min = arr[i];
minIndex = i;
for (let j = i + 1; j < len; j++) {
if (min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
arr[minIndex] = arr[i];
arr[i] = min;
}
return arr
}