C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例
算法
Reverse Array (數(shù)組翻轉(zhuǎn))
code
void reverse(int array[], int left, int right) { int l, r; for (l = left, r = right; l < r; l++, r--) { array[l] = array[l] ^ array[r]; array[r] = array[l] ^ array[r]; // l ^ r ^ r = l ^ 0 = l. array[l] = array[l] ^ array[r]; // l ^ r ^ l = r ^ 0 = r; } }
上述代碼通過異或運算來高效實現(xiàn)變量值的交換,請記?。?/p>
- 任何數(shù)與0異或的結(jié)果都是它本身。
- 任何數(shù)與1異或的結(jié)果都是它的相反數(shù)。
循環(huán)左移
假設(shè)我們循環(huán)左移n位,則實現(xiàn)的步驟是:
- 翻轉(zhuǎn)數(shù)組的前n位元素;
- 翻轉(zhuǎn)數(shù)組剩下的元素;
- 再翻轉(zhuǎn)整個數(shù)組,然后就實現(xiàn)了循環(huán)左移n位的功能。
以上步驟的順序也可以改為step2 -> step1 -> step3.
code:
reverse(array, 0, left_shift_num - 1); reverse(array, left_shift_num, array_size - 1); reverse(array, 0, array_size - 1);
循環(huán)右移
假設(shè)我們循環(huán)右移n位,則實現(xiàn)的步驟是:
- 翻轉(zhuǎn)數(shù)組的后n位元素;
- 翻轉(zhuǎn)數(shù)組剩下的元素;
- 再翻轉(zhuǎn)整個數(shù)組,然后就實現(xiàn)了循環(huán)右移n位的功能。
以上步驟的順序也可以改為step2 -> step1 -> step3.
code:
reverse(array, 0, array_size - right_shift_num - 1); reverse(array, array_size - right_shift_num, array_size - 1); reverse(array, 0, array_size -1);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C/C++ 中sizeof(''a'')對比詳細(xì)介紹
這篇文章主要介紹了C/C++ 中sizeof('a')的值對比詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02C++實現(xiàn)景區(qū)旅游信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)景區(qū)旅游信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03C語言熱門考點結(jié)構(gòu)體與內(nèi)存對齊詳解
在掌握基本的結(jié)構(gòu)體使用后,我們在面試和大型比賽中常常會遇到一個熱門考點:結(jié)構(gòu)體內(nèi)存對齊,也就是計算結(jié)構(gòu)體大小。接下來請跟著筆者一起來學(xué)習(xí)這塊知識點吧2021-10-10