算法1 -- 排序 FCC初级算法题

①.冒泡排序

// 冒泡排序,比较相邻的元素由小到大排序
function bubbleSort(arr) {
  let i = j = 0;
  for(i=1;i<arr.length;i++) {
      for(j=0;j<=arr.length-i;j++){
          let temp = 0;
          // 前一个大于后一个,两者互换位置
          if(arr[j]>arr[j+1]){
              temp = arr[j];
              arr[j] = arr[j+1];
              arr[j+1] = temp;
          }
      }
  }
  return arr;
}
View Code

冒泡排序

②.快速排序  (图解)

以基数为标准,最右开始查小于基数停止,最左边开始查大于基数停止,互换位置停止的位置;left=right表示基数左为小于基数,基数右大于基数的;拆分基数左右在小组比,直到arr.length < 2;

var arr=[5,7,2,9,3,8,4,7,1];
// 每次选择最左边的数作为基数
function quickSort(arr){
  // 数组只有1个数
  if (arr.length<2) { return arr; }

  // 定义左指针,右指针
  let left=0,right=arr.length-1;

  //开启每一轮的排序
  while(left<right){
    // 寻找右边比arr[0]小的数的下标
    while(arr[right]>=arr[0] && left<right){
      right=right-1;
    }
    // 寻找左边比arr[0]大的数的下标
    while(arr[left]<=arr[0] && left<right){
      left++;
    }
    //当左边指针与右边指针相遇后,交换arr[0]与当前两个指针所在的元素
    if (right==left) {
      let mid=arr[right];
      arr[right]=arr[0];
      arr[0]=mid;
      break;
    }
    // 当左指针小于右指针的位置,交换两个指针当前位置的元素
    let tem=arr[right];
    arr[right]=arr[left];
    arr[left]=tem;
  }
  
  //递归实现
  return quickSort(arr.slice(0,left)).concat(arr.slice(left,right+1)).concat(quickSort(arr.slice(right+1)));
}
//对数组进行排序
console.log(quickSort(arr));
View Code

 基数6

 ③.二路归并(分治算法思想)

将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序

function merge(left, right) {
  var result = [];

  while (left.length && right.length) {
    if (left[0] < right[0]) {
      result.push(left.shift());
    } else {
      // left[0] >= right[0]
      result.push(right.shift());
    }
  }
  return result.concat(left, right);
}

function mergeSort(arr) {
    // 数组长度为一返回结果
  if (arr.length === 1) { return arr; }

  // 造一个空数组,把旧数组每个值转换为数组,并赋予空数组(深拷贝)
  var work = [];
  for (var i = 0, len = arr.length; i < len; i++) {
    work.push([arr[i]]);
  }
    
  work.push([]); // 如果数组长度为奇数
  for (var lim = len; lim > 1; lim = ~~((lim + 1) / 2)) {
    // k+=2是要两两比较,并把比较的两位数推进进新的数组
    for (var j = 0, k = 0; k < lim; j++, k += 2) {
      work[j] = merge(work[k], work[k + 1]);
    }
    work[j] = []; // 如果数组长度为奇数
  }

  return work[0];
}
/*
[1,5,3,4]
// 分
[1][5],[6][4]
[1,5],[4,6]
// 合循环
[1,4,5,6]
*/
console.log(mergeSort([1, 5, 6, 4, 84, 0, 8, 8, 4]));
View Code

阶乘:小于及等于该数的正整数的积(n! = 1*2*3*4...*n)

FCC初级算法题

 https://www.freecodecamp.cn/

1.

Web开发者通常用lorem ipsum text来做占位符,占位符就是占着位置的一些文字,没有实际意义。

为什么叫lorem ipsum text呢?

是因为lorem ipsum是古罗马西塞罗谚语的前两个单词。

从公元16世纪开始lorem ipsum text就被当做占位符了,这种传统延续到了互联网时代。

于此同时,孙悟空也在五指山下压了500年,然后就进化成程序猿了,是不是很巧合,哈哈。

2.

80-20原则

3.family

MonospaceSerifSans-Serif

<link href="https://fonts.gdgdocs.org/css?family=Lobster" rel="stylesheet" type="text/css">  google字体

 

6

alt属性,也被称为alt text, 是当图片无法加载时显示的替代文本。alt属性对于盲人或视觉损伤的用户理解一幅图片中所描绘的内容非常重要,搜索引擎也会搜索alt属性。

简而言之,每一张图片都应该有一个alt属性!

 

5

给你的输入框添加required属性,这样用户不填写输入框就无法提交表单。

 

6

body {
background-color: black;
}

7

hexadecimal code(十六进制编码),简写为 hex code

decimals,也就是十进制数字

https://en.wikipedia.org/wiki/Hexadecimal       十六进制数字的信息

猜你喜欢

转载自www.cnblogs.com/lgyong/p/10419400.html