1--对一个整数进行若干次变换,直到这个数只剩下一位数字,变换规则:将这个数变成所有位数上的数字的乘积,输出变换的次数
function GetResult(n){
var count = 0;
while(n>= 10){ //n大于等于10的遍历,即不满足变换规则停止的条件下应该做的事
var m = n; //保存n变量
var s = 1; //乘数设置
var str = m + "="; //变换规则输出的定义
while(m) { //n存在的遍历
s *= m % 10; //求取最后一位上的数字,并进行乘积运算
if(m <10){ //输出样式调整
str += m% 10;
}else {
str += m % 10 + "*";
}
m = parseInt(m/10); //将输入的数减少一位,即末尾数去掉
}
console.log(str);
n = s;
count++;
}
console.log(count);
return n;
}
console.log(GetResult(3369))
/*
3369=9*6*3*3
486=6*8*4
192=2*9*1
18=8*1
4
8
*/
2--冒泡排序
思想:比较相邻的两个元素,若前一个元素比后一个大,则交换位置;第一轮的时候最后一个元素应该是最大的一个;按照步骤1方法进行相邻两个元素的比较,这个时候最后一个元素已经是最大的了,不需要再进行比较。
function bubblesort(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-i-1;j++){
if(arr[j] > arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
var arr=[1,3,4,6,2,9,5];
console.log(arr);
bubblesort(arr);
console.log(arr);
3-- 快排
思想:选择一个基准数,这里以数组第一个元素为基准,对数组从第二个元素开始进行遍历,对于大于基准的元素push进right数组,对于小于基准的元素push进left数组。对left、right数组进行递归。将left、pivot、right相拼接。
function quickSort(arr){
if(arr.length<=1) {
return arr;
}
var left=[];
var right=[];
var pivot=arr[0];
for(var i=1;i<arr.length;i++){
if(arr[i]<pivot) {
left.push(arr[i]);
}else {
right.push(arr[i]);
}
}
return quickSort(left).concat(pivot,quickSort(right));
}
var arr=[5,6,2,1,3,8,7,1.2,5.5,4.5];
console.log(quickSort(arr));
4--插入排序
思想:
(1) 从第一个元素开始,该元素可以认为已经被排序
(2) 取出下一个元素,在已经排序的元素序列中从后向前扫描
(3) 如果该元素(已排序)大于新元素,将该元素移到下一位置
(4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
(5)将新元素插入到下一位置中
(6) 重复步骤2
function insertSort(arr){
if(arr.length <= 1){
return arr
}
for(var i=1; i<arr.length; i++){
var tmp = arr[i] //把arr[i]保存起来,防止被覆盖
var j = i-1 //定位排好序的最大元素
while(tmp < arr[j] && j>=0){ //如果要插入的元素小于排好序的最大元素,将该最大元素向后移,j向前移,继续比较
arr[j+1] = arr[j]
j--
}
arr[j+1] = tmp
}
return arr
}
var arr = [5,3,2,4,1,10]
console.log(insertSort(arr))
5--二分查找
思想:二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
递归:
function binarySearch(arr,findVal,leftIndex,rightIndex){
if(leftIndex>rightIndex){
return ;
}
var midIndex=Math.floor((leftIndex+rightIndex)/2);
var midVal=arr[midIndex];
if(midVal>findVal){
binarySearch(arr,findVal,leftIndex,midIndex-1);
}else if(midVal<findVal){
binarySearch(arr,findVal,midIndex+1,rightIndex);
}else{
console.log(“找到,下标为:”+midIndex);
return
}
}
非递归:
function binarySearch(data, item){
var h = data.length -1, l = 0;
while(l <= h ){
var m = Math.floor((h+l)/2);
if(data[m]===item){ //找到
return m;
}else if(item > data[m]){ //如果要查找的数据大于中间值,则在右半边查找
l = m + 1;
}else{ //要查找的数据小于中间值,则在左半边查找
h = m -1;
}
}
return -1;
}