日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.???????排序問題

a)??????選擇排序

//選擇排序,第一個和逐一和后面每個數比較,比較后交換使得第一個數成為較大/小值后,第一個數后面所有數比較完了就得到了最大/小值(第一趟比較完畢),然后第二個和后面每個數比較得到 第二大/小值。。。

var a=[10,1,29,8,19,11,20,12,56,78];

for(var i=0;i<a.length-1;i++){

??? for(var j=i+1;j<a.length;j++){

????????? if(a[i]>a[j]){

?????????????? var temp ;

?????????????? temp = a[i] ;

?????????????? a[i]? = a[j];

?????????????? a[j]=temp;

????????? }

??? }

}

a;

b)??????冒泡排序

//冒泡排序,第一個和第二數個比較大小,根據比較情況選擇是否冒泡(交換位置),

第二個數和第三個數比較,根據比較情況選擇是否冒泡(交換位置)。。。第一趟比較完畢,最大/小值已放到最最后一位,然后第二趟

var a=[10,1,29,8,19,11,20,12,56,78];

for(var i=0;i<a.length;i++){//控制循環趟數

???? for(varj=0;j<a.length-1;j++){//每趟進行冒泡比較

????????? if(a[j]>a[j+1]){

??????????????? var temp ;

??????????????? temp = a[j] ;

??????????????? a[j]? = a[j+1];

??????????????? a[j+1]=temp;

????????? }

???? }

}

a;

上面代碼雖然可以實現冒泡排序的效果,但是不夠優化

如果冒泡排序10個數,只需要循環9趟即可,因為循環第10趟是排序已經排好。再就是外循環跑一趟,實際上已經把最大/小值冒泡到最后位置,所以內循環進行冒泡排序不在需要和已經冒泡好的數據進行比較。

故此,優化后的代碼是:

var a=[10,1,29,8,19,11,20,12,56,78];

for(var i=0;i<a.length-1;i++){//控制循環趟數,排序數字個數減一

//每趟進行冒泡比較,已經冒泡的數字不在循環比較

???? for(varj=0;j<a.length-1-i;j++){????????

if(a[j]>a[j+1]){

??????????????? var temp ;

??????????????? temp = a[j] ;

??????????????? a[j]? = a[j+1];

??????????????? a[j+1]=temp;

????????? }

???? }

}

a;

1.???????漢諾塔問題


這是典型的函數遞歸調用問題

1)??當A塔上只有1個圓盤,可直接從A—>C。

2)??當A塔上有2個圓盤, A—>B(小圓盤),A—>C(大圓盤),B—>C(小圓盤)。

當有2個圓盤時,需要借助B柱子進行轉換。

3)??當我們有很多圓盤時,我們可以看做2個圓盤,最下面的大圓盤 和其上面的所有圓盤當做小圓盤。這樣我們就可以用函數遞歸調用了。

比如A柱上有10個圓盤,我們需要把A柱10號大圓盤 上所有圓盤移動 B柱,這樣10號大圓盤盤就可以移動到C柱。我們想要把10號圓盤上的所有圓盤移動到B柱,我們就需要把9號圓盤上所有圓盤移動到A柱,這樣9號圓盤就可以移動到B柱。感覺有點說不清,畫個圖:


/**

*@param num 盤子數

*@param A 當前柱子

*@param B 中間柱子

*@param C 目標柱子

*/

function? hanLuo(num,A,B,C){

???? if(num==1){

????????? console.log(A+'-->'+C);//只有一個盤子A-->C

}else{

???? hanLuo(num-1,A,C,B);//將num-1個盤子從A-->B

???? console.log(A+'-->'+C);?? //將最下面的盤子(num)盤子,從A柱子移動到C柱子???

???? hanLuo(num-1,B,A,C)//將num-1個盤子從B-->C

}

}

hanLuo(2,'A','B','C');

?

function? hanLuo(num,A,B,C){

???? if(num==1){

????????? returnA+'-->'+C+',';//只有一個盤子A-->C

}else{

???? var str1 =hanLuo(num-1,A,C,B);//將num-1個盤子從A-->B

???? var str3 =A+'-->'+C+','; //將最下面的盤子(num)盤子,從A柱子移動到C柱子???

???? var str2 =hanLuo(num-1,B,A,C)//將num-1個盤子從B-->C

???? return str1+str3+str2;

}

}

hanLuo(2,'A','B','C');


總結

以上是生活随笔為你收集整理的经典编程问题之:选择排序、冒泡排序、汉诺塔游戏,均用js代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。