1.冒泡排序 选择排序
冒泡排序
冒泡排序规则:前后两两进行比较,如果符合比较的条件,就交换两个数的位置,直到所有的数据,都符合从小到大条件,结束排序。
规律:每一轮比较,都会找出一个较大的数,放在正确的位置。
比较的轮数 = 数组长度 - 1;
每一轮比较的次数 = 数组长度 - 当前轮数;
具体代码如下:
//冒泡排序
let arr = [100, 55, 5, 20, 8];
for (let i = 0; i < arr.length - 1; i++) { //决定比较几轮
for (let j = 0; j < arr.length - i - 1; j++) { //决定每一轮比较多少次
if (arr[j] > arr[j + 1]) {
let temp = arr[j]; // 变量互换位置
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr); // [ 5, 8, 20, 55, 100]
选择排序
规律:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。
比较的轮数 = 数组长度 - 1
每一轮比较次数 = 数组长度 - 当前轮次
具体代码如下:
//用选择排序的方法从小到大排列数组元素。
let arrs = [9, 8, 7, 6, 5, 4];
//比较的轮数
for(let i = 0; i < arrs.length - 1; i++){
//每轮比较的次数
for(let j = i + 1; j < arrs.length; j++){
if(arrs[i] > arrs[j]){
let tmp = arrs[i];
arrs[i] = arrs[j];
arrs[j] = tmp;
}
}
}
console.log(arrs); //[ 4, 5, 6, 7, 8, 9 ]
2.字符串中大写字母出现的次数
思路:用ASCII码 来判断 65-90 是大写字母的范围
charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。
具体代码如下:
let str = 'ASDdvdbFDGFGNaaR';
let temp = 0;
for (let i = 0; i < str.length; i++) {
if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
temp++;
}
}
console.log(temp); //10
3.字符串中字母相同的个数
思路:声明一个空的对象,用字符串中的值 作为对象的key 键名 value为存在的个数
let str2 = 'aaabbbfgtfffdfhgnfh';
let obj = {}; //声明一个空的对象 对象中的key值是不能重复存在的 所以用str2里的每一个字母作为key的值
for (let i = 0; i < str2.length; i++) {
let char = str2.charAt(i); //遍历出str2里面的每一个字母
if (obj[char]) {
obj[char]++; //存在则++
} else {
obj[char] = 1; //不存在则value 赋值为1
}
}
console.log(obj);
4.数组去重
第一种方法(set,get)
set里不可以出现重复的元素 并且是无序的
let arr2 = [10, 10, 50, 60, 82, 50, 10, 65, 80, 90];
let setArr = new Set(arr2); //去重了 但是没有顺序 Set { 10, 50, 60, 82, 65, 80, 90 } 是一个对象
let getArr = Array.from(setArr); // [10, 50, 60, 82, 65, 80, 90] 去重并且排序
console.log(getArr);
第二种方法(indexOf)
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。–有值
没有值则返回 -1;
let temp2 = [];
for (let i = 0; i < arr2.length; i++) {
if (temp2.indexOf(arr2[i]) === -1) {
temp2.push(arr2[i])
}
}
console.log(temp2);