我正在嘗試在不使用 sort 函式的情況下對整數陣列進行排序。我知道 Stack Overflow 上還有其他解決方案。我想知道我的代碼有什么問題。除了陣列中的第一個數字外,它執行升序排序。
let arr = [2,4,5,1,3,7];
let iterable = true;
let iterationCount = 0;
while(iterable) {
for(var i=iterationCount;i<=arr.length;i ) {
if (arr[i] > arr[i 1]) {
let temp=arr[i];
arr[i]=arr[i 1];
arr[i 1]=temp;
}
}
iterationCount ;
if (iterationCount == arr.length) {
iterable = false;
}
}
console.log(arr)
輸出是 [2, 1, 3, 4, 5, 7] 而它應該是 [1, 2, 3, 4, 5, 7]。
uj5u.com熱心網友回復:
您可以更改外回圈以保持最后一個索引進行檢查并迭代直到最后一個索引之前,因為在第一個內回圈中,最大值現在位于最大索引處,任何進一步的迭代都不需要檢查最新的最后一項.
let array = [2, 4, 5, 1, 3, 7],
iterationCount = array.length;
while (iterationCount--) {
for (let i = 0; i < iterationCount; i ) {
if (array[i] > array[i 1]) {
let temp = array[i];
array[i] = array[i 1];
array[i 1] = temp;
}
}
}
console.log(array);
uj5u.com熱心網友回復:
- 每次繞過內部回圈時,它會將每個元素向左移動零或一個空格。
- 每次繞過外回圈時,它都會忽略左側的一個元素。
這意味著它假設在一次回圈之后最左邊的元素是最小的元素(并且在兩次回圈之后,最左邊的兩個元素是兩個最小的元素)。
但是,由于 (1)1將已從位置 3 移動到位置 2,但它需要位于位置 0。
維基百科有一些流行的排序演算法,如果你從頭開始實作排序,你應該仔細閱讀。
uj5u.com熱心網友回復:
我將 for 回圈固定為始終從 0 開始,然后它就可以作業了。
let arr = [2, 4, 5, 1, 3, 7];
for (let j = 0; j < arr.length; j ) {
for (let i = 0; i < arr.length; i ) {
if (arr[i] > arr[i 1]) {
const temp = arr[i];
arr[i] = arr[i 1];
arr[i 1] = temp;
}
}
}
console.log(arr)
編輯:我把整個事情縮短了一點
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/376394.html
標籤:javascript 排序
上一篇:按其欄位串列對陣列進行排序
