青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

[算法問題]交換兩個子數組的元素值

問題描述:
?設a[0:n-1]是一個有n個元素的數組,k(0<=k<=n-1)是一個非負整數.試設計一個算法將子數組
a[0:k]與a[k+1:n-1]換位.要求算法在最壞情況下耗時O(n), 且只用到O(1)的輔助空間.

這個問題比較常見了,一般的辦法就是分別把兩個子數組分別逆序排列,然后對整個數組進行逆序排列.也就是說,對一個數組
a[8] = {1,2,3,4,5}而言,如果k = 2,那么首先對兩個子數組進行逆序操作得序列{3, 2,1,5,4},然后對整個數組逆序排列得到{4,5,1,2,3}.

下面給出的是另一種辦法,采用的是遞歸方法,結合前面的例子講述一下思想,在例子中前面的元素數量大于后面的元素數量(前面是3個,后面是兩個),那么先以含有比較少的元素子數組的數量為標準進行交換,得到序列:{4,5,3,2,1},中間多出來的3沒有參與到這次交換之中,這個時候含有比較少的元素的子數組{4,5}已經被交換到了最后合適的位置,后面的操作可以不必考慮它們了.對剩余子數組的操作顯然和原來的問題有類似的行為,我們要做的是交換序列{3}和序列{2,1}的位置,因此這是一個遞歸可以解決的問題.

應該說,兩種算法各有千秋吧.前一種辦法最壞的時候每個元素都要移動兩次才能到達最后合適的位置,但是第二種辦法在兩個數組元素數量相同的時候只需要移動一次元素就可以到達合適的位置了.
當然了,這個辦法不如前一個方法那么"聰明",要寫正確也不是很容易,但是可以作為分治法或者是遞歸法解決問題的一個實例.


#include?<stdio.h>

void?DisplayArray(int?*pArray,?int?nLen)
{
????
for?(int?i?=?0;?i?<?nLen;?++i)
????
{
????????printf(
"array[%d]?=?%d\n",?i,?pArray[i]);
????}

}


void?SwapSubArray(int?*pArray1,?int?*pArray2,?int?n)
{
????
int?temp;
????
for?(int?i?=?0;?i?<?n;?++i)
????
{
????????temp?
=?*(pArray1?+?i);
????????
*(pArray1?+?i)?=?*(pArray2?+?i);
????????
*(pArray2?+?i)?=?temp;
????}

}


void?ChangeArray(int?*pArray,?int?nLen,?int?k)
{
????
if?(NULL?==?pArray)
????????
return;
????
if?(k?<?0?||?k?>?nLen?-?1)
????????
return;

????
int?m,?n,?num;
????
if?(nLen?-?k?-?1?>?k?+?1)????????????????????????????????????//?如果后半部分的元素多
????{
????????m?
=?nLen?-?k?-?1?-?k?-?1;????????????????????????????????//?m是兩部分元素數量之差
????????SwapSubArray(pArray,?pArray?+?k?+?1?+?m,?k?+?1);????????//?交換兩部分元素數目相同的部分
????????ChangeArray(pArray,?nLen?-?k?-?1,?k);
????}

????
else?if?(nLen?-?k?-?1?<?k?+?1)????????????????????????????????//?如果前半部分的元素多
????{
????????m?
=?k?+?1?-?nLen?+?k?+?1;
????????SwapSubArray(pArray,?pArray?
+?k?+?1,?k?+?1?-?m);????????//?交換兩部分元素數目相同的部分
????????ChangeArray(pArray?+?nLen?-?k?-?1,?k?+?1,?m?-?1);
????}

????
else????????????????????????????????????????????????????????//?前后兩部分元素數量相同
????{
????????SwapSubArray(pArray,?pArray?
+?k?+?1,?k?+?1);
????}

}


int?main()
{
????
int?array[]?=?{0,?1,?2,?3,?4,?5,?6,?7};
????
int?nLen?=?sizeof(array)?/?sizeof(array[0]);
????DisplayArray(array,?nLen);

????ChangeArray(array,?nLen,?
1);
????printf(
"after?change:\n");
????DisplayArray(array,?nLen);

????
return?1;
}


posted on 2006-09-26 23:21 那誰 閱讀(1794) 評論(1)  編輯 收藏 引用 所屬分類: 算法與數據結構

評論

# re: [算法問題]交換兩個子數組的元素值  回復  更多評論   

遞歸方法堆棧的開銷是題目要求的O(1)嗎?
2006-09-27 21:05 | elife
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            狠狠做深爱婷婷久久综合一区| 欧美成人嫩草网站| 久久久精品视频成人| 亚洲国产一区二区三区青草影视| 性欧美8khd高清极品| 亚洲高清av在线| 欧美 亚欧 日韩视频在线| 午夜在线一区二区| 亚洲人成在线播放| 亚洲一区免费| 日韩视频在线一区| 亚洲欧美日韩在线高清直播| 在线欧美日韩国产| 亚洲日本乱码在线观看| 欧美午夜在线一二页| 猛男gaygay欧美视频| 欧美日韩伦理在线| 欧美激情中文字幕在线| 国产精品一区二区久久| 亚洲国产精品精华液2区45| 国产精品日韩专区| 亚洲国产日日夜夜| 红桃视频欧美| 亚洲欧美视频在线观看视频| 在线视频精品一区| 免费成人高清在线视频| 欧美sm视频| 亚洲福利视频网站| 久久精品夜夜夜夜久久| 久久久精品999| 精东粉嫩av免费一区二区三区| 亚洲精品一二| 亚洲一区二区免费| 国产精品另类一区| 欧美伊人久久大香线蕉综合69| 夜色激情一区二区| 欧美日韩视频在线第一区| 中文成人激情娱乐网| 亚洲欧美精品| 黑人巨大精品欧美一区二区小视频 | 国产精品区免费视频| 99精品国产福利在线观看免费| 一区二区三区国产在线| 国产精品v日韩精品| 久久久噜噜噜久噜久久| 亚洲国产清纯| 欧美一区亚洲二区| 亚洲精品欧美| 国产一区二区高清视频| 美女精品自拍一二三四| 99精品国产福利在线观看免费| 亚洲欧美日韩综合aⅴ视频| 激情成人在线视频| 欧美日韩亚洲综合在线| 久久久久国产成人精品亚洲午夜| 国产精品久久久久aaaa九色| 久久久噜噜噜久久中文字幕色伊伊| 亚洲精品视频在线| 亚洲高清免费视频| 欧美日韩大陆在线| 欧美激情a∨在线视频播放| 欧美一级视频| 亚洲私人影院在线观看| 亚洲大片免费看| 美女黄网久久| 国产精品盗摄久久久| 亚洲高清色综合| 国产欧美一区二区三区国产幕精品| 久久精品最新地址| 亚洲小视频在线| 欧美激情精品久久久久久免费印度| 性做久久久久久| 亚洲欧美日本伦理| 亚洲一区二区三区精品在线观看| 在线成人欧美| 亚洲免费观看在线观看| 国产一区二区三区免费观看| 国产精品入口麻豆原神| 国产精品亚洲片夜色在线| 国产精品午夜春色av| 国产亚洲精品高潮| 在线精品视频一区二区| 亚洲国内欧美| av成人免费观看| 亚洲三级网站| 亚洲精品一区二区三区99| 亚洲一区二区3| 久久亚洲视频| 亚洲精品永久免费| 欧美在线综合视频| 嫩草成人www欧美| 欧美日韩另类在线| 亚洲第一视频网站| 午夜欧美不卡精品aaaaa| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲国产高清自拍| 亚洲一级黄色av| 欧美日韩大片| 亚洲国产精品免费| 欧美小视频在线| 亚洲一区综合| 亚洲精品美女免费| 亚洲欧美日本国产有色| 欧美**人妖| 一本色道久久综合亚洲精品婷婷| 欧美专区第一页| 欧美精品成人| 在线观看三级视频欧美| 欧美影院在线播放| 亚洲图片欧美午夜| 欧美成人精品在线| 亚洲高清一区二区三区| 欧美中文字幕在线| 亚洲视频久久| 欧美三级乱人伦电影| 亚洲精品一区二区三区蜜桃久| 久久久久久久久一区二区| 亚洲美女视频在线观看| 欧美三级不卡| 久久不射2019中文字幕| 亚洲一区999| 国产精品羞羞答答| 裸体一区二区三区| 欧美成人精品在线视频| 亚洲一区精品电影| 亚洲私人影院| 伊人久久大香线| 亚洲伦理中文字幕| 国产精品毛片va一区二区三区| 中国女人久久久| 欧美一区二区三区视频在线| 亚洲在线视频一区| 午夜精品久久久久久久久久久| 亚洲视频中文| 一区二区三区在线视频免费观看| 久久久久久久久久久久久9999| 久久亚洲国产精品日日av夜夜| 亚洲日本在线观看| 欧美在线地址| 亚洲视频一区二区在线观看| 午夜亚洲性色福利视频| 久久久人成影片一区二区三区观看| 亚洲电影免费在线观看| 久久免费国产精品1| 在线亚洲欧美专区二区| 亚洲精品欧洲| 狠狠综合久久| 亚洲一区激情| 亚洲美女精品一区| 久久九九免费视频| 亚洲在线观看视频| 欧美a级大片| 欧美成人一区二区| 国产一区二区三区无遮挡| 亚洲另类视频| 99日韩精品| 欧美久久成人| 亚洲精品综合在线| 欧美激情一二区| 久久精品成人一区二区三区蜜臀| 久久久噜噜噜| 久久只有精品| 欧美freesex交免费视频| 国产一区二区三区在线观看视频 | 99re66热这里只有精品3直播| 亚洲国产国产亚洲一二三| 欧美影院午夜播放| 激情久久久久久| 99视频精品在线| 欧美/亚洲一区| 亚洲精品一二| 亚洲欧美一区二区三区久久| 国产精品高清在线| 欧美在线视频免费观看| 狼狼综合久久久久综合网 | 欧美激情国产日韩| 99综合视频| 欧美三级电影网| 欧美一区二区精品| 国产一区二区三区在线播放免费观看| 久久久久久久激情视频| 一区二区毛片| 国产精品看片资源| 久久亚洲精品网站| 亚洲乱码久久| 国产精品一区免费视频| 久久久www成人免费无遮挡大片| 亚洲精品久久| 久久一二三四| 欧美一区亚洲二区| 亚洲图片在线| 欧美午夜视频| 欧美日本一区二区视频在线观看| 久久久999| 欧美亚洲三区| 亚洲男女自偷自拍| av72成人在线| 国产精品99久久不卡二区| 亚洲精品国产品国语在线app| 欧美大片在线看免费观看|