陣列迴圈左移最優演算法 逆置演算法

2021-09-25 00:10:52 字數 524 閱讀 5548

設將 n 個整數存放到一維陣列 r 中。試設計乙個在時間和空間兩方面都盡可能高效的演算法,將 r 中的元素序列迴圈左移 p 個位置。

該問題的乙個最優解為逆序演算法。具體演算法設計思路、時間複雜度與空間複雜度分析及演算法原始碼(c 語言)如下。

舉個例子:

將 abcdefg 迴圈左移 3 位:

/*陣列迴圈左移——逆置演算法*/

void reverse(int r, int from, int to )

}void shift(int r, int n, int p )

時間複雜度:三個 reverse 函式的時間複雜度分別是 o(p/2)、o((n-p)/2)、o(n/2),所以演算法時間複雜度為 o(n)。

空間複雜度:而空間複雜度就是 o(1)

借助輔助陣列來解決問題:

演算法思想:

時間複雜度和最優解的一樣,都是 o(n);

但是由於使用了輔助陣列,所以空間複雜度為 o(p)。

佇列元素逆置演算法

1.題目 使用乙個棧 乙個佇列,實現佇列中元素逆置的演算法 2.利用佇列先進先出,棧先進後出的特性,實現佇列元素的逆置 3.原始碼 1.題目 使用乙個棧 乙個佇列,實現佇列中元素逆置的演算法 include define maxsize 1000 typedef structqueue typede...

順序表的逆置演算法

對於線性表傳線性表s的引用 int main return 0 通過 s解說主函式傳遞的引用,getchar 函式會吃回車,為了方便用a作為停止迴圈的標誌 void insert int i,seqlist s s a i 1 0 s num i 比較常見的演算法,但是重新寫一次的時候想到微機原理裡...

資料結構 演算法設計題 陣列迴圈左移

設將n個整數存放到一維陣列r中。試設計乙個在時間和空間兩方面盡可能高效的算,將r中儲存的序列迴圈左移動p個位置,即將r中的資料由 x0,x1,x2,xn 1 變換為 xp,xp 1,xn 1,x0,xp 要求 給出演算法的基本設計思想 說明演算法的時間複雜度和空間複雜度。先將n個資料原地逆置,得到x...