在面試中游沿,我們往往會遇到手撕代碼饰抒,下面介紹javascript手寫三種常見算法
快速排序
```javascript
function quick(str){
? ? ? ? if(str<=1){//遞歸需要結束條件,當數(shù)組元素剩1時诀黍,返回
? ? ? ? ? ? return str;
? ? ? ? }
? ? ? var mid=Math.floor(str.length/2);//選擇中間索引袋坑,Math.floor和Math.ceil都可以
? ? ? var midvalue=str.splice(mid,1)[0];//去除mid索引的value值
? ? ? let larr=[],rarr=[];//右數(shù)組放比midvalue大的值,數(shù)組放比midvalue大的值眯勾,左數(shù)組同理
? ? ? ? for (let i = 0; i < str.length; i++) {//遍歷枣宫,并且遞歸左右數(shù)組
? ? ? ? ? ? const strElement = str[i];
? ? ? ? ? ? strElement>midvalue?rarr.push(strElement):larr.push(strElement);
? ? ? ? }
? ? ? ? return quick(larr).concat(midvalue,quick(rarr));//返回拼接的數(shù)組
? ? }
? ? let str=[12,7,15,3,16,1,14];
? ? str= quick(str);
? ? console.log(str);
```
插入排序
```javascript
function insert(str){
? ? ? ? var handle=[];
? ? ? ? handle.push(str[0]);//handler表示手里握著的票,我們利用玩撲克牌時吃环,由亂序到升序的思想
? ? ? ? for (let i = 1; i < str.length; i++) {
? ? ? ? ? ? let compareA = str[i];//從第二個比較
? ? ? ? ? ? for (let j = handle.length-1; j >= 0; j--) {
? ? ? ? ? ? ? ? let compareB = handle[j];//手里的牌從后往前比較也颤,若大于曾handle.splice(j+1,0,A),意思是把A插入到j后面compareA
? ? ? ? ? ? ? ? if (compareA>compareB) {
? ? ? ? ? ? ? ? ? ? handle.splice(j+1,0,compareA);
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(j==0){//若比較到沒牌郁轻,還是沒找到compareA>compareB歇拆,則直接把compareA放第一位
? ? ? ? ? ? ? ? ? ? handle.unshift(compareA);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return handle;
? ? }
? ? let str=[12,7,15,3,16,1,14];
? ? str= insert(str);
? ? console.log(str);
```
?冒泡排序
```javascript
function maopao(temp) {
? ? ? let nup=null;
? ? ? ? for (let i = 0; i < temp.length-1; i++) {//雙循環(huán)遍歷,然后比較
? ? ? ? ? ? for (let j = 0; j < temp.length-i-1; j++) {//每次都會有個最大的數(shù)產生范咨,因此故觅,j的循環(huán)會減去i
? ? ? ? ? ? ? ? if(temp[j]>temp[j+1]){//最水的交換
? ? ? ? ? ? ? ? ? ? nup= temp[j];
? ? ? ? ? ? ? ? ? ? temp[j]=temp[j+1];
? ? ? ? ? ? ? ? ? ? temp[j+1]=nup;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return temp;
? ? }
? ? let arr=[12,8,24,16,1];
? ? arr=maopao(arr);
? ? console.log(arr);
```