js氣泡排序和快速排序

2021-10-08 18:45:05 字數 1585 閱讀 4461

氣泡排序:兩層for迴圈進行遍歷;逐個比較,大的放右邊。

在這裡插入**片//氣泡排序

let arr =

;for

(let i =

0; i <

300; i++

)function

sort2

(array)}}

}

用於交換素組內容的方法:

function

exchange

(arrr,x,y)

為了將兩種排序的快慢進行比較,我們需要獲取執行前的時間和執行後的時間。(單位ms)。

let time1 =

newdate()

.gettime()

;sort2

(arr)

;let time2 =

newdate()

.gettime()

;console.

log(time2 - time1)

;

快速排序:取參考值(我是以陣列的第一項作為參考的),然後對整個陣列進行遍歷,與參考值進行比較。(新建兩個空陣列 l ,r)比他大的或者等於他的放右邊,比他小的放左邊,遞迴地對左右陣列進行相同處理,左右陣列返回後使用array.concat()進行拼接。問題出現的地方,如果不把參考項挖出來,就會出現下面這種情況:

[5,2,8,9,6,3,4]

[2,3,4] — [5,8,9,6]

[ ]–[2,3,4] —[ ]–[5,8,9,6]

發現了嗎,右邊的陣列將不會減少,最後我們使用遞迴的時候就會直接棧溢位。所以我們要用splice方法把原陣列挖出參考項。

這是錯誤**:

function

sort1

(arry)

let x1 = arry[0]

;letl=

,r=;

for(

let i =

0; i < arry.length; i++

)else

}return

sort1(l

).concat

(x1,

sort1(r

));}

加一句splice後就正確了:

function

sort1

(arry)

let x1 = arry.

splice(0

,1);

//把取出的參考值賦給x1,原陣列將少一項。

letl=[

],r=

;for

(let i =

0; i < arry.length; i++

)else

} , r);

return

sort1(l

).concat

(x1,

sort1(r

));}

本人2023年畢業萌新一枚,第一次發文,有不足的地方希望各位大佬多多指正。

排序 氣泡排序和快速排序

實現思路 把第乙個元素作為標記,依次判斷後續的值,如果小於它則放在左邊,如果大於它則放右邊,同理把左右兩部分看成乙個整體一直遞迴,最後再陣列拼接起來 它的最優時間複雜度為o nlogn 以標記元素為中心,正好每次左右都能均勻分配 最糟糕時間複雜度為o n 2 標記元素每次是最大或最小值,使所有數都劃...

氣泡排序和快速排序

來自 氣泡排序1 自創的,不知道它叫什麼排序,和冒泡差不多。public void risepot ref int array 氣泡排序2 public void risepot ref int array 快速排序 public void quicksort ref int arr,int low...

氣泡排序和快速排序

pragma mark pragma mark 氣泡排序 選擇排序 void swap int a,int b void bubblesort int a,int length 簡單優化,對於已經有序的序列,省去接下的迴圈。對於這種優化,實際還需考慮,多了賦值和判斷操作。if temp length...