陣列中交換元素的幾種方法總結

2021-09-25 06:01:48 字數 1304 閱讀 9510

在完成關於陣列的大量演算法中,基本都會涉及到元素交換,比如排序中是最常見的,一般的方法是新建乙個臨時變數,然後完成交換,如果給定的陣列中元素是有範圍的,其實還有其他方法也可以完成交換。下面就來總結一下這些方法。

臨時變數法是最簡單的,這個不過多解釋。試用任何型別的元素交換。

public

static

void

swap

(int

a,int i,

int j)

異或運算是針對具體的每乙個位相同為0,不同為1,即1^1 = 0, 0^0 = 0, 1^0 = 1, 0^1 = 1

所以對於任何整數x有x^x = 0,x^0 = x,且運算滿足結合律。所以可以用如下方法完成交換。

public

static

void

swap

(int

a,int i,

int j)

但是這裡有個問題,如果要交換的是同乙個位置,即i = j, 上面**會有問題,a[i] = a[i] ^ a[j] = 0,此後a[i] = a[j] = 0,不管傳入時a[i] 等於多少,最後都等於0了。所以改進方案是交換前先判斷i和j是否相等,如果不想等才交換。改進**如下:

public

static

void

swap

(int

a,int i,

int j)

}

可以先把要交換的兩個數相加,然後分別減去對方的值,也能完成交換。這裡有個問題,a[i]+a[j] 有可能會越界,但是實際測試就算真的越界,還是能完成交換,可以用實際資料測試一下。

public

static

void

swap

(int

a,int i,

int j)

既然可以用加減法,乘除法也是可以一試的,先把兩個數相乘,然後分別除以對方,就能完成交換。這裡也會有問題,a[i] * a[j]也可能出現越界情況,但是實測也能得到正確結果。關鍵乘除法還有乙個重大問題,a[i]和a[j]不能等於0,所以此方法不推薦使用。

public

static

void

swap

(int

a,int i,

int j)

陣列位置交換的幾種方法

1.引入第三個變數 var arr one two var item arr 0 arr 0 arr 1 arr 1 item 2.splice方法,splice 方法會直接對陣列進行修改,splice 方法向 從陣列中新增 刪除專案,然後返回被刪除的專案。arr.splice 1,1,arr 0 ...

數值交換的幾種方法

1 最簡單 最標準的一種方法,建立乙個臨時變數 int main 2 在不建立臨時變數的情況下交換兩個數的值 1 通過加減乘除的方法交換數值 define crt secure no warnings 1 include 交換兩個數的內容 int main 由於int定義整型變數,佔四個位元組。它定...

PHP輸出陣列中重名的元素的幾種方法

1.可以直接用php的內建函式array intersect array intersect 返回乙個陣列,該陣列包含了所有在 array1 中也同時出現在所有其它引數陣列中的值。注意鍵名保留不變。輸出結果 2.也可以自己寫乙個演算法 輸出結果 3.還可以這麼寫 如果是一維的陣列,第三種演算法比第一...