C語(yǔ)言實(shí)現(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; } }
上述代碼通過(guò)異或運(yùn)算來(lái)高效實(shí)現(xiàn)變量值的交換,請(qǐng)記?。?/p>
- 任何數(shù)與0異或的結(jié)果都是它本身。
- 任何數(shù)與1異或的結(jié)果都是它的相反數(shù)。
循環(huán)左移
假設(shè)我們循環(huán)左移n位,則實(shí)現(xiàn)的步驟是:
- 翻轉(zhuǎn)數(shù)組的前n位元素;
- 翻轉(zhuǎn)數(shù)組剩下的元素;
- 再翻轉(zhuǎn)整個(gè)數(shù)組,然后就實(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位,則實(shí)現(xiàn)的步驟是:
- 翻轉(zhuǎn)數(shù)組的后n位元素;
- 翻轉(zhuǎn)數(shù)組剩下的元素;
- 再翻轉(zhuǎn)整個(gè)數(shù)組,然后就實(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);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用QDir實(shí)現(xiàn)刪除選定文件目錄下的空文件夾
這篇文章主要為大家詳細(xì)介紹了如何利用QDir實(shí)現(xiàn)刪除選定文件目錄下的空文件夾功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-08-08C/C++ 中sizeof(''a'')對(duì)比詳細(xì)介紹
這篇文章主要介紹了C/C++ 中sizeof('a')的值對(duì)比詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02C++實(shí)現(xiàn)景區(qū)旅游信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)景區(qū)旅游信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C語(yǔ)言熱門考點(diǎn)結(jié)構(gòu)體與內(nèi)存對(duì)齊詳解
在掌握基本的結(jié)構(gòu)體使用后,我們?cè)诿嬖嚭痛笮捅荣愔谐3?huì)遇到一個(gè)熱門考點(diǎn):結(jié)構(gòu)體內(nèi)存對(duì)齊,也就是計(jì)算結(jié)構(gòu)體大小。接下來(lái)請(qǐng)跟著筆者一起來(lái)學(xué)習(xí)這塊知識(shí)點(diǎn)吧2021-10-10解決C語(yǔ)言數(shù)組元素循環(huán)右移的問(wèn)題
今天小編就為大家分享一篇解決C語(yǔ)言數(shù)組元素循環(huán)右移的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07OpenCV相機(jī)標(biāo)定的全過(guò)程記錄
這篇文章主要給大家介紹了關(guān)于OpenCV相機(jī)標(biāo)定的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03c++11中regex正則表達(dá)式示例簡(jiǎn)述
這篇文章主要給大家介紹了關(guān)于c++11中regex正則表達(dá)式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c++11具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11C++ 遍歷目錄下文件簡(jiǎn)單實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了c++ 遍歷文件的相關(guān)資料,這里附有實(shí)現(xiàn)實(shí)例代碼,需要的朋友可以參考下2017-02-02