算法在鄙人目前的工作中用得很少,但闲暇之余逛知乎,走简书,许多大神无不强调着算法的重要性!算法考量了程序员的基础、思维能力以及内功的深厚程度。
于是,便花时间学习总结了一些常见的算法:
// 冒泡算法
var arr = [2,15,21,4,121,1410,12,45,1001,178,1216874,1546874,1245];
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len; i++) {
for (var j = 1; j < len; j++) {
if (arr[j] > arr[j+1]) { //相邻元素两两对比
var temp = arr[j]; //元素交换
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));
// 元素交换
function swap (a,b) {
b = b - a;
a = b + a;
b = a - b;
return [a,b]
}
console.log(swap(1,2));
//快速排序
var arr = [2,15,21,4,121,1410,12,45,1001,178,1216874,1546874,1245];
function quickSort (arr) {
console.time();
if(arr.length <=1 ){
return arr;
}
var leftArr = [],rightArr = [];
var q= arr[0];
for(var i = 1 ; i<arr.length;i++){
if (arr[i] > q) {
rightArr.push(arr[i]);
} else {
leftArr.push(arr[i]);
}
}
console.timeEnd();
return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
}
console.log(quickSort(arr));
// 字符串出现最多的字符和出现次数
var str = "nninihao";
var o = {};
for(var i = 0 ; i<str.length;i++){
var _char = str.charAt(i);
console.log(_char);//ninihao
if(o[_char]) {
o[_char]++;
} else {
o[_char] = 1;
}
}
console.log(o); //{n: 3, i: 2, h: 1, a: 1, o: 1}
var max = 0;
for( var key in o) {
if(o[key] > max) {
console.log(key); // n
console.log(o[key]); // 3
max = o[key]; //始终令max保持最大值
}
}
for( var key in o ) {
if(o[key] == max) { //当出现次数等于最大值时输出
console.log("最多的字符是" + key);
console.log("出现的次数是" + max);
}
}
//查找某个字符串出现的位置
var arr = "aabfcsdfks";
var index = -1;
do{
console.log(index);//-1 3 7
index = arr.indexOf("f", index+1);
console.log(index);//3 7 -1
if (index != -1) {
//字符串没有出现,返回-1
console.log(index);//3 7
};
}
while(index != -1);
持续更新中..