導航:首頁 > 編程語言 > 冒泡拍序js

冒泡拍序js

發布時間:2024-03-04 19:48:58

javascript中的冒泡排序法

AVA氣泡分類法

拓展資料

氣泡排序的原理是,有五個數字54321,例如從小到大排列。

首先比較前兩個,5個和4個,如果第一個小於第二個,沒有運算,如果第一個大於第二個,則交換兩個位置,即45321個,然後第二個和第三個,交換位置,變成43521個,然後第三個和第四個,第四個和第五個,這樣的時間周期下來,轉向。進入43215

因此,一個循環的效果是挑選出最大的數字5並將其泡泡到底。但是選擇第二,第三等等。因此,一層循環是不夠的,它必須是另一層。例如,五個數字,至少四個周期。至於為什麼這個,長度-i,是因為第一個比較五個數字,第二個只要第一個四將做,第五個必須是最大的。

var數組=〔5, 4, 3,2, 1〕;

VATP=0;

對於(var i=0;i <數組,長度;i++)

{

對於(var j=0;j<數組,長度-i;j++)

{

IF(數組[j] >數組[j+1])

{

TEMP=數組[J+1 ];

數組[j+2]=數組[j];

數組[j]=TEMP;

}

}

}

控制台,日誌(數組);

js幾種常見的排序演算法

原理:比較兩個相鄰的元素,將值大的元素交換至右端。

思路:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重復第一趟步驟,直至全部排序完成。

N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數。

冒泡排序的優點:每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較大值。如上例:第一趟比較之後,排在最後的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最後一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了演算法的量。

冒泡排序優化版:

一.選擇排序原理

1.每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置

2.再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到剛才已排序序列的後面。

3.以此類推,直到全部待排序的數據元素排完。

選擇排序是不穩定的排序方法。例如:序列3,3,2,1, 我們知道第一次遍歷的時候,選擇最後一個元素1和第一個元素3交換,那麼原序列中2個3的相對前後順序就和之前不一樣了,所以選擇排序不是一個穩定的排序演算法。

二.選擇排序時間復雜度

第一次循環比較 n - 1次,第二次循環比較 n - 2次,依次類推,最後一個元素不需要比較,因此共進行 n - 1次循環,最後一次循環比較1次。

因此一共比較1 + 2 + 3 + ... +(n - 2)+(n - 1)次,求和得n2/2 - n / 2 ,忽略系數,取最高指數項,該排序的時間復雜度為O(n2)

選擇排序優化版:

插入排序:

❸ JS數組排序

JS數組排序方法有兩個: reverse() 和 sort() ,其中 reverse() 可將數組進行倒序,而 sort() 則可將數組項靈活地進行升序或降序排列。

可以看出, reverse() 會直接改變原數組,並且返回值也是倒序後的數組。

記得當年學C語言時,要學各種各樣的排序演算法,比如經典的冒泡排序法、二分排序法等,現在拋開這些演算法不說,JS就自帶原生的排序函數,用起來非常方便,它就是 sort() 。

可以看出, sort() 不傳參數時會按升序方式對數組項進行排序,並且與 reverse() 一樣既改變原數組,同時返回的也是排序後的數組。

我們再來看下一個例子:

這時你可能會說,不對呀,最終排序返回的不應該是 [8, 9, 16, 90] 嗎?然鵝事實返回的卻是 [16, 8, 9, 90] ,這到底是哪門子邏輯?

事實上, sort() 並不是按照數值進行排序,而是按字元串字母的ASCII碼值進行比較排序的,所以當數組項為數字時, sort() 也會自動先將數字轉換成字元串,然後再按字母比較的規則進行排序處理。

現在我們再回頭看看前面兩個例子。當 arr 為 [8,4,9,1] 時,數組每一項轉換成字元串後進行排序的結果正好與數字排序結果相同;而當 arr 為 [8,90,9,16] 時,數組每一項轉換成字元串後就得按順序一位一位進行比較,比如升序排序時,「16」應該排在最前面,因為「16」的第一位是「1」,比「8」和「9」的ASCII碼值都要小。

啰嗦了這么多,其實我們實際很少會使用這種排序方式,而更多的應該就是純數字的排序。那麼我們該如何正確地使用 sort() 來達到預期的排序效果呢?

接下來就來看看傳參後的 sort() 能給我們怎樣的精彩表現。

這個函數參數功能其實很簡單,實際上就是告訴 sort() 排序方式到底是升序還是降序,我們還是來看具體實例吧~

這種用法的規則是,當 sort() 傳入函數中的第一個參數a位於第二個參數b之前,則返回一個負數,相等則返回0,a位於b之後則返回正數。

比如,當要做升序排序時,我們需要想到前面的數肯定是要比後面的數小,所以傳入的這個函數參數返回值應該要是個負數,因此函數參數返回 a - b 。

如果實在不好理解,我們可以乾脆記下來, a - b 升序, b - a 降序,但是需要注意的是,如果按照這種記憶方式的話,函數括弧內的兩個參數 a 和 b 的書寫順序可不能顛倒哦~

❹ 如何用js代碼在頁面上實現tr排序

我看有jQuery的語法,就用jQuery類似的,輸入的時間沒有去校驗,格式如2011-4-19 11:35:11
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery</title>
<script language="javascript" type="text/javascript" src="js/jquery-1.4.4.js" ></script>
<script type="text/javascript">
$(document).ready(function()
{
$("#b").click(function(){
var eDate = $("#eDate").val();

$("#t tr").each(function(i){
if(!compareTime($("td:eq(1)",this).html(),eDate) && i==0){ //輸入時間小於第一行時間則直接插入到第一行前
$("#t tr").eq(i).before("<tr><td>content</td><td>"+ eDate +"</td></tr>");
return false;
}
else if($("#t tr").size()-1 > i){ //比較第二行到最後前一行,如果是在期間的,插入行
if(compareTime($("td:eq(1)",this).html(),eDate) && !compareTime($("#t tr").eq(i+1).find("td").eq(1).html(),eDate)){
$("#t tr").eq(i+1).before("<tr><td>content</td><td>"+ eDate +"</td></tr>");
return false;
}
else{
return true;
}
}
//輸入時間大於所有行的,插入到最後
$("#t").append("<tr><td>content</td><td>"+ eDate +"</td></tr>");
});
});
});

//時間比較函數
function compareTime(startDate, endDate) {
var startDateTemp = startDate.split(" ");
var endDateTemp = endDate.split(" ");

var arrStartDate = startDateTemp[0].split("-");
var arrEndDate = endDateTemp[0].split("-");

var arrStartTime = startDateTemp[1].split(":");
var arrEndTime = endDateTemp[1].split(":");

var allStartDate = new Date(arrStartDate[0], arrStartDate[1], arrStartDate[2], arrStartTime[0], arrStartTime[1], arrStartTime[2]);
var allEndDate = new Date(arrEndDate[0], arrEndDate[1], arrEndDate[2], arrEndTime[0], arrEndTime[1], arrEndTime[2]);

if (allStartDate.getTime() >= allEndDate.getTime()) {
return false;
} else {
return true;
}
}
</script>
</head>

<body>
<input type="text" id="eDate" value="" /><button type="button" id="b">insert</button>
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="t">
<tr>
<td>111</td>
<td>2011-04-19 11:20:00</td>
</tr>
<tr>
<td>aaa</td>
<td>2011-04-19 11:40:00</td>
</tr>
<tr>
<td>3xxx</td>
<td>2011-04-19 13:30:00</td>
</tr>
<tr>
<td>gfedd</td>
<td>2011-04-19 20:50:00</td>
</tr>
</table>

</body>
</html>

❺ js中settimeout 沒有停頓效果,一下執行到底

setTimeout(swap(elements[i],elements[j]),1000);這種調用方式,本身就是立即執行swap(elements[i],elements[j]),然後再把返回值作為setTimeout的參數,這肯定是錯的。

應該這樣:

//定義交換函數	
functionswap(a,b){
vartemp=a.style.height;
a.style.height=b.style.height;
b.style.height=temp;
}

//冒泡排序
functionsort(i,j){
varelements=document.getElementById("display").children;
j++;
if(j>=elements.length){
i++;
if(i>=elements.length-1)return;
j=i+1;
}
if(parseInt(elements[i].style.height)<parseInt(elements[j].style.height)){
swap(elements[i],elements[j]);
setTimeout("sort("+i+","+j+")",1000);
}else{
sort(i,j);
}
}

//調用
window.onload=function(){
document.getElementById("sort").onclick=function(){
setTimeout("sort(0,0)",1000);
}
}

❻ js數組排序的幾種方法

一、 冒泡排序
平均復雜度:o(n^2) 空間復雜度:o(1) 穩定性:穩定
步驟: 1、比較相鄰的元素。如果第一個比第二個大,就交換他們兩個;
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣,最後的元素應該會是最大的數;
3、針對所有的元素重復以上的步驟,除了最後一個;
4、持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
二、選擇排序
平均復雜度:o(n^2) 空間復雜度:o(1) 穩定性:不穩定
步驟: 1、每一次循環,找到最小的那個數,並用變數記住它的索引
2、然後將最小值放在它該在的位置上
3、持續對越來越少的元素重復上面的步驟
三、插入排序
平均復雜度:o(n^2) 空間復雜度:o(1) 穩定性:穩定
(1)直接插入排序:將第一個數和第二個數排序,然後構成一個有序序列;將第三個數插入進去,構成一個新的有序序列;對第四個數、第五個數......直到最後一個數,重復第二步
(2)二分插入排序:將尋找每個數插入位置的方法改為折半比較即可
四、Shell排序(插入排序的一種,又稱為縮小增量排序)
平均復雜度:o(nlogn) 空間復雜度:o(1) 穩定性:不穩定
步驟:把數組按下標的一定增量分組,然後對每組使用直接插入排序
想學習更多前端開發的知識,就來北京尚學堂!

❼ js里寫了個冒泡排序 結果沒變 大神指導指導小白

傳參不對,var s = [1,3,1,4,3];

閱讀全文

與冒泡拍序js相關的資料

熱點內容
我們身邊都有哪些大數據例子 瀏覽:25
震旦adc307掃描的文件在哪裡 瀏覽:999
圖片打開變成文件 瀏覽:194
松下微單電腦傳文件軟體 瀏覽:574
蘋果藍牙鍵盤surface 瀏覽:170
mindmaplinux 瀏覽:733
oppo手機怎麼連接電腦傳輸數據 瀏覽:624
word刪除章節附註分隔符 瀏覽:773
公告質疑需要哪些文件 瀏覽:608
資料庫模型是干什麼的 瀏覽:404
win10的驅動怎麼安裝驅動 瀏覽:320
word文件水印怎麼取消 瀏覽:443
rhel6的鏡像文件在哪裡下載 瀏覽:571
成功正能量微信頭像 瀏覽:848
wps表格如何恢復數據 瀏覽:264
linuxc靜態庫創建 瀏覽:838
u盤有微信文件但微信恢復不了 瀏覽:585
蘋果的網站數據是什麼 瀏覽:22
ps滾字教程 瀏覽:237
win7網路鄰居如何保存ftp 瀏覽:186

友情鏈接