js--基礎演算法

来源:https://www.cnblogs.com/hekuheku/archive/2018/08/22/9520980.html
-Advertisement-
Play Games

遞歸:遞歸函數是在一個函數通過名字調用自身情況下構成的 /*function jiecheng(n){//n=5 if(n==1){//基點 return 1; }else{ return n*jiecheng(n-1); } }*/ //alert(jiecheng(100));//9.33262 ...


遞歸:遞歸函數是在一個函數通過名字調用自身情況下構成的

/*function jiecheng(n){//n=5
if(n==1){//基點
return 1;
}else{
return n*jiecheng(n-1);
}

}*/

//alert(jiecheng(100));//9.33262154439441e+157 10的157次方。

//2.利用遞歸求斐波那契數列的前20項
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,

/*function fb(n){//n:位置
if(n==1 || n==2){//基點
return 1;
}else{
return fb(n-1)+fb(n-2)
}
}

//alert(fb(8));
for(var i=1;i<=20;i++){
document.write(fb(i)+',');
}*/



//1.冒泡排序
//冒泡排序演算法的原理如下:
//比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
//對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
//針對所有的元素重覆以上的步驟,除了最後一個。
//持續每次對越來越少的元素重覆上面的步驟,直到沒有任何一對數字需要比較。
/*var arr=[9,30,4,89,75,456,2,7,-100,9];
var times=0;//次數
for(var i=0;i<arr.length-1;i++){//控制次數 -1:10個數字只需要兩兩比較9次。
for(var j=0;j<arr.length-i-1;j++){//-i:i迴圈一次,j迴圈到底,每一次i的迴圈都已經排好一個數字。
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
times++;
}
}
console.log(arr);
console.log(times);*/

//2.選擇排序

//選擇排序(Selection sort)是一種簡單直觀的排序演算法。
它的工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,
直到全部待排序的數據元素排完。
/*var arr=[9,300,4,890,7500,456,20,70,-100,-9];
for(var i=0;i<arr.length;i++){
var minindex=i;//假設最小值的下標
var minvalue=arr[minindex];//假設最小值

for(var j=i+1; j<arr.length;j++){
if(minvalue>arr[j]){
minvalue=arr[j];
minindex=j;
}
}
//如果上面的for迴圈完成,代表minindex就是最小值的下標。
if(minindex!=i){//如果minindex!=i說明找到了真正的最小值。否則就代表假設的剛好就是最小值。
var temp=arr[minindex]
arr[minindex]=arr[i];
arr[i]=temp;
}
}
console.log(arr);*/


//3.快速排序(去重)

//在數組中截取中間值,中間值可以任意獲取。--splice
//剩餘的數組項都和中間值進行比較,如果比中間值小,放置在一個數組中,比中間值大,放到另外一個數組中。
//分別對上面的兩個數組重覆上面的操作--遞歸
//最終利用concat進行拼接。輸出結果

/*var arr=[9,300,4,890,7500,456,20,70,-100,-9];
function quicksort(array){
if(array.length<=1){
return array;
}else{
var midindex=parseInt(array.length/2);//獲取中間索引
var midvalue=array.splice(midindex,1)[0];//獲取中間值
var left=[];
var right=[];
for(var i=0;i<array.length;i++){
if(array[i]<midvalue){
left.push(array[i]);
}else{
right.push(array[i]);
}
}
return quicksort(left).concat(midvalue,quicksort(right));
}
}
console.log(quicksort(arr));*/

//去重


indexOf去重
/*var arr=[9,301,4,8900,4,7500,4156,20,70,4156,-100,-9,9,9,4,8900,20];
var newarr=[];
for(var i=0;i<arr.length;i++){
if(newarr.indexOf(arr[i])==-1){
newarr.push(arr[i]);
}
}
console.log(arr);
console.log(newarr);*/


/*var arr=[9,301,4,8900,4,7500,4156,20,70,4156,-100,-9,9,9,4,8900,20];

var newarr=arr.filter(function(value,index,array){

return arr.indexOf(value)==index;//數組項的索引是否等於當前索引。

});*/

console.log(newarr);


var arr=[1,7,5,6,4,1,2,6];
function norepeat(arr){
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[j]==arr[i]){
arr.splice(i,1);
arr.length-1;
j--;
}
}
}return arr;
}console.log(norepeat(arr));


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我在build.gradle中添加 apply plugin: 'realm-android' //依賴Realm資料庫,插件化依賴 這個後,同步,清理,運行的時候報 應該在build.gradle(Project)裡面添加classpath 但是在rebuild的之後還是報錯 原來是realm-a ...
  • Dialog的基本方法 系統樣式 1.下拉列表 2.單選框列表 3.多選框列表 4.等待對話框 5.進度條對話框 自定義Dialog 1.繼承Dialog 2.自定義Style 3.自定義佈局 4.ipad隱藏底部虛擬按鍵 5.使用自定義Dialog ...
  • 背景: 使用TextView時,為了方便在開發工具中預覽效果,需要在TextView中設置文字(如:android:text="Hello World"),但是等到後面提交時,為了避免顯示這樣預設的信息,通常需要把這個刪除掉。但是刪除後,後續就無法預覽TextView了,為開髮帶來不便。 目標: 既 ...
  • 最近花了點心思整理了下我的博客園主題代碼,今天正式和大家分享一下,感興趣的園友可以瞭解一下。 主題介紹 Silence 追求大道至簡的終極真理,旨在打造一個乾凈、專註閱讀的博客主題,沒有二維空間元素、不存在花里胡哨。 簡單概括其幾個主要特點: 專註閱讀、精緻漂亮的 UI; 事無巨細的部署文檔; 相容 ...
  • 我們都知道瀏覽器有同源策略(same-origin policy)的安全限制,即每個站點只允許載入來自和自身同域(origin)的數據,https://a.com 是無法從 https://b.com 載入到資源的。每個站點被嚴格限制在了自已的孤島上,自己就是一個沙盒,這樣很安全,整個網路不會雜亂無... ...
  • 一、函數參數 1.可以使用預設參數 2.用let或const再次聲明參數會報錯,var不會。 3.使用參數預設值時,函數不能有同名參數。 4.參數預設值不是傳值的,而是每次都重新計算預設值表達式的值。也就是說,參數預設值是惰性求值的。 5.通常情況下,定義了預設值的參數,應該是函數的尾參數。 6.指 ...
  • 如何編碼解碼 編碼:var code=encodeURI("原文"); 解碼:var 原問=decodeURI("code"); 用encodeURIComponent代替encodeURI 用decodeURIComponent代替decodeURI eval 專門執行字元串格式的表達式 var ...
  • 滾動條距離(某些瀏覽器下麵做相容)document.documentElement.scrollTop || document.body.scrollTop 事件監聽實現相容:if(elem.addEventListener){ elem.addEventListener("click",fn) } ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...