轉換和玩數字是編譯數組數據結構最迷人的方面之一。關於這一點,您是否知道數組可用於存儲迄今為止已發現的無限自然數和數字?

我們將在本博客中討論的其中一個數字組件是整數。整數是可以為正數、負數甚至零的數字。

在這個數組問題中,我們將討論如何使用簡單的方法和算法將所有負元素移動到數組的末尾或開頭

請記住元素的順序與此問題無關。我們只考慮負元素並將它們放在列表的開頭或結尾。

將所有負元素移動到數組的一側的方法是什麼?

編程中的數組是最通用的數據結構之一。這是因為,從數字到整數,數組也有助於存儲無限的正值、負值甚至零值整數。此外,數組中的這些元素可能存儲在隨機位置,而不管它們的一般順序如何。

有許多算法和方法可以幫助對數組中的這些元素進行排序和移動。因此,我們可以說這是一種根據程序的要求對數組進行排序的形式。

這個問題在編程面試中經常被問到。在博客的以下部分,我們將討論這些方法將所有負元素移動到數組的末尾

如何將所有元素移動到數組的一側使用C?

為了學習如何將所有負元素移動到數組的末尾,我們將藉助示例來考慮這個問題。這裡我們有一個由負整數和正整數組成的輸入數組。

讓我們在本節進一步討論將負元素移向數組一側的途徑和方法。

輸入數組

1-2 3-1 8 9

輸出數組

1 9 3 8-2-1

正如我們在數組的輸出中看到的,負元素有被安排在序列的末尾。

請記住,這些元素的排列不一定要按完美的順序排列。只要我們在程序中將所有負元素移動到結尾,它們就可以隨機排列。

現在,讓我們討論一下可用於移動的不同方法

方法 1:使用樸素方法

我們將首先嘗試使用樸素方法解決此問題。這種方法通常也稱為遞歸算法,用於解決各種其他編程問題,例如執行 二叉樹的之字形遍歷

在將所有負元素移動到數組末尾的上下文中,我們可以首先按降序對給定的數組進行排序這樣,所有負元素將堆積在數組的末尾為了實現這一點,我們可以實現選擇排序功能,即選擇排序(int arr[],int n)在這個函數,對於數組中的每個第 i 個元素,我們將嘗試從 i+1 中找出子數組中的最小元素,並嘗試交換它們的值以在末尾對數組進行排序

此方法的時間複雜度:

O(n*log(n))

方法2:使用分區方法

現在我們正在朝著更高效的方向發展t和方便的方法。對於此方法,我們將使用嵌套循環僅對整個數組執行一次遍歷。

使用分區方法的一種簡單方法是對數組的整個長度實施嵌套循環這個循環將幫助我們檢測需要移動到末尾的負整數。

下面是這個方法的實現方式:

您可以首先聲明一個變量,例如 j=0 在數組的開頭 for arr[j] 接下來,我們將使用循環的 i 指針遍歷整個數據現在,在迭代的每一步,我們將記錄是否 arr[i ] 是否為負 如果發現為真,我們只需將元素與 arr[j] 交換並將其放在輸入數組的開頭 最後,您可以遞增元素 j 及其值並繼續執行此過程對於數組的剩餘元素

這種方法的時間複雜度:

O(n)

這裡我們考慮了“n”到是我們輸入數組的長度

方法 3:使用變量或指針技術

正如您可能已經猜到的那樣,為了將所有負元素移動到末尾,作為我們的第三種方法,我們將在輸入數組的開始和結束位置初始化兩個變量或指針“m”和“n”。

通過使用這種技術,我們將保留一個跟踪數組中的所有元素並連續遞增 m 指針並遞減 n 指針。

下面是此方法的算法如何工作:

如果 m 和 n 指針都指向指向負元素,然後將元素的值增加到 m 如果指針 m 的值是正數,指針 n 是負數,則交換它們的值 如果兩個指針都指向正整數,則遞減指針 n 最後,如果 m 指向負元素而 n 指向正元素,則遞增 m 並遞減 n 最後的想法

有很多基於數組的問題可以使用指針和朴素方法來解決,例如執行二叉樹的之字形遍歷

這些方法提供了自己的一組類和函數,可以有效地用於降低問題的時間複雜度。

By Maxwell Gaven

我在 IT 行業工作了 7 年。 觀察 IT 行業的不斷變化很有趣。 IT 是我的工作、愛好和生活。