在 JavaScript 中不使用字串方法和陣列對整數進行排序


在給定的問題陳述中,我們的任務是在不使用字串方法和陣列的情況下,藉助 Javascript 功能對整數進行排序。因此,為了解決此任務,我們將使用 Javascript 中的數學運算和迴圈。

理解問題

問題要求在 Javascript 中不使用字串和陣列方法對給定的整數進行排序。問題在於對整數進行排序,這意味著我們必須將其數字按升序或降序排列。

例如,假設我們有一個整數 784521,那麼排序後的結果將是升序的 124578 和降序的 875421。因此,基本上我們的任務是在不包含字串和陣列方法的情況下執行該技術以獲得相同的結果。因此,我們將採用數學方法並從給定數字中提取每個數字,並將其插入到排序後的數字中的正確位置。

給定問題的邏輯

為了對給定的整數進行排序,我們將建立一個函式來執行此任務。該函式接受一個整數作為輸入,並將對其數字進行降序排序。我們還將使用一個輔助函式將數字的每個數字插入到排序後的數字的正確位置。該過程將迭代原始數字的數字,並將它們與正在插入的當前數字進行比較。最後,我們將得到排序後的數字作為結果。

演算法

步驟 1:宣告一個函式並將其命名為 sortInteger,該函式的任務是對給定的輸入整數進行排序。

步驟 2:定義一個變數來儲存排序後的整數,並將其命名為 sortedNum,並將其初始化為零。

步驟 3:現在使用 while 迴圈,並執行此迴圈直到給定數字變為零。在迴圈內部,我們將提取數字除以 10 的餘數後數字的最後一位數字。並將結果賦值給變數 digit。呼叫輔助函式並將其命名為 insertDigit,在函式內部,我們將傳遞 sortedNum 和 digit 作為引數。並更新數字。

步驟 4:使用另一個 while 迴圈,我們將計算當前數字,如果該值小於當前數字且 inserted 為假,那麼我們將把 digit 乘以 multiplier 加到新數字中,並將其設定為 true。

步驟 5:如果 inserted 仍然為假,則將 digit 乘以 multiplier 加到新數字中,並將新數字作為結果返回。

示例

//Function to sort the given integer numbers
function sortInteger(num) {
if (num < 0) {
   // Negative numbers is not supported
   return -1;
}

let sortedNum = 0;

while (num > 0) {
   // Extract the last digit
   const digit = num % 10;
   // Insert the digit at the right position
   sortedNum = insertDigit(sortedNum, digit);
   num = Math.floor(num / 10);
}

return sortedNum;
}

function insertDigit(num, digit) {
if (num === 0) {
   return digit;
}

let newNum = 0;
let multiplier = 1;
let inserted = false;

while (num > 0) {
   const currDigit = num % 10;

   if (digit < currDigit && !inserted) {
     newNum += digit * multiplier;
     inserted = true;
   }

   newNum += currDigit * (multiplier * (inserted ? 10 : 1));
   num = Math.floor(num / 10);
   multiplier *= 10;
}

if (!inserted) {
   newNum += digit * multiplier;
  }

  return newNum;
}

// Testing
console.log(sortInteger(302541));
console.log(sortInteger(123456789));
console.log(sortInteger(504030201));

輸出

543210
987654321
543210000

複雜度

函式 sortInteger 迭代給定數字的數字,它需要 O(log n) 次迭代,這裡 n 是輸入數字的值。我們還使用了 insertDigit 函式,在最壞情況下,它也需要 O(log n) 次迭代。因此,函式的時間複雜度為 O(log n * log n)。建立函式的空間複雜度為 O(1),因為程式碼只需要常量數量的記憶體來儲存變數,因此空間不依賴於輸入數字的大小。

結論

正如我們已經解決了給定的問題,而沒有在 Javascript 中使用字串或陣列操作技術。我們只是利用數學運算和迴圈來獲取和重新排列輸入數字的數字。因此,我們滿足了給定問題的所有要求。

更新於: 2023年8月16日

699 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.