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

快排的一種簡易寫法

   雖然簡易二字,因人而異。不過,寫一個快排確實并不需要過20行,超過幾分鐘時間的代碼。面試的時候,面試官確實會經常問起快排什么的。但是,大家上的入門課基本是使用嚴蔚敏老奶奶的教材,上面對于快排的講解我是不敢恭維的。至少上面關于快排的寫法,我是寫過好幾次之后都是沒掌握好的。后面,應該是看K&R的c語言程序設計時候,發現一種更簡便的partion方法,但是當時我也沒怎么掌握。這一切直到,寒假認真閱讀算法導論的時候。

   不用算法牛人,算法學得好或者對快排理解深刻的,不用把這篇文章看完了,相信你們都能在10分鐘之內寫一個正確的快排了。
   廢話少說,還是來講講如何保證10分鐘之內寫一個正確的快排,而且以后都能10分鐘之內寫出來,而不是此刻看了我說的這些胡言之后。
   
   快排的主函數大家都會,現在我給個簡易點的樣子:
void QuickSort(int* pnA, int nLen)
{
   if (nLen > 1)
   {
         int nP = Partion(pnA, nLen);
         QuickSort(pnA, nP);//排序第nP+1個元素前面的nP個元素
         QuickSort(pnA + nP + 1, nLen - nP - 1);//排序第nP+1個元素后面的元素
   }
}

那么現在就剩下Partion函數了。
我記得嚴蔚敏書上的寫法中Partion 函數里面是有幾個循環的。而且即使大概寫出來了,也很難處理正確邊界。
現在,我要說的就是算法導論上,作為教材內容出現的Partion函數。還是看代碼吧。
int Partion(int* pnA, int nLen)
{
   //這里選擇最后一個元素作為軸元素
   int i, j;
   for (i = j = 0; i < nLen - 1; ++i)
   {
      if (pnA[i] < pnA[nLen - 1])
      {
            swap(pnA[i], pnA[j];//交換2個數的函數,大家都能寫吧,stl中也有
            ++j;
      }
   }
   swap(pnA[j], pnA[nLen - 1]);
   return j;
}

   為了公平起見,上面的代碼我都是在blog上面直接敲的,寫這10多行代碼是絕對用不了10分鐘的。主遞歸函數大家都會寫,Partion函數里面只有一個for循環,所以只要明確了for循環的意思,快排的速寫就迎刃而解了。其實,按照算導的說法,這個for一直在劃分區間。區間[0,j-1]是小于最后一個元素的區間,[j,nLen - 2]是大于等于最后一個元素的區間,所以最后將第nLen-1個元素與第j個元素交換即可,Partion應該返回的值也應該是j
   我不知道大家理解上面那句黑體字的話沒,如果理解了,隨便寫個快排是沒問題了。至少,可能的下次面試時候,可以瀟灑地寫個快排給面試官看看了,雖然這也許并不是什么值得慶幸的事情。


   算法導論里面的快速排序那章后面還有思考題,其中第一個思考題,提出的另外一種叫做Hoare劃分的partion寫法,意思就和嚴蔚敏書上的partion函數一致的。理解的關鍵是,軸元素一直處于被交換中。只要發現了這點,寫一兩次后,這種partion方法也能掌握好了,不過寫起來是循環嵌循環了,沒那么舒服。

posted on 2012-03-03 23:26 yx 閱讀(2736) 評論(9)  編輯 收藏 引用 所屬分類: 排序

評論

# re: 快排的一種簡易寫法 2012-03-04 14:35 xtao

你好,我看到了你的算法,但是認為有問題,
其中這段
for (i = j = 0; i < nLen - 1; ++i)
{
if (pnA[i] < pnA[nLen - 1])
{
swap(pnA[i], pnA[nLen - 1];//交換2個數的函數,大家都能寫吧,stl中也有
++j;
}
}

swap函數是否應該是這樣的
swap(pnA[i],pnA[j]);  回復  更多評論   

# re: 快排的一種簡易寫法 2012-03-04 14:44 遠行

這里確實寫錯了,不好意思,昨晚沒發現@xtao
  回復  更多評論   

# re: 快排的一種簡易寫法 2012-03-04 18:55 sms

你的這個快速排序算法應該沒有嚴蔚敏的快!  回復  更多評論   

# re: 快排的一種簡易寫法 2012-03-04 19:18 遠行

應該差不多吧,基本操作都是交換元素,而且這種寫法開始不會動軸元素@sms
  回復  更多評論   

# re: 快排的一種簡易寫法[未登錄] 2012-03-05 13:34 Chipset

你的速度不行,數據結構書上的更垃圾。  回復  更多評論   

# re: 快排的一種簡易寫法 2012-03-05 15:41 遠行

你可以給個更快的partion方法讓大家學習下@Chipset  回復  更多評論   

# re: 快排的一種簡易寫法[未登錄] 2012-03-05 17:17 Chipset

需要用到直接插入排序,堆排序和三點取中找支點,然后分割,有點麻煩,到這里去看怎么優化的:
http://m.shnenglu.com/Chipset/archive/2011/08/16/153546.html
或者把STLPort代碼下載下來去里面找,原理是一樣的。
我主頁上有常見的14種排序,如果單線程的話,快排是最快的,多線程需要重新設計,太麻煩,最容易實現并行的排序個人認為是歸并排序。  回復  更多評論   

# re: 快排的一種簡易寫法 2012-03-05 19:15 遠行

對于怎么并行排序確實沒思考過,不過快排很明顯的優化是隨機選取軸元素,三數取中選軸元素算導也提到過,還有你說的堆排優化快排,應該是只在遞歸到小數據量時候使用堆排了,不過小數量時候一直聽說使用插入速度更快,不過這些都是對快排的優化了,不是我寫這篇文章的意思,我是覺得有些人不一定看過算導,也不一定看過STL源碼,所以不一定知道很快的寫出基本的快排,所以寫下這個文章,也當作自己的學習記錄,另外你的文章很不錯,學習了@Chipset
  回復  更多評論   

# re: 快排的一種簡易寫法 2013-04-20 22:02 xt

http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html
這個效率比較高  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2012年3月>
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美粗暴jizz性欧美20| 久久综合色8888| 欧美日韩在线亚洲一区蜜芽| 免费久久99精品国产自| 欧美成人69| 欧美乱大交xxxxx| 欧美性猛交xxxx乱大交退制版| 欧美日韩免费观看一区三区| 国产精品成人久久久久| 国产日产欧产精品推荐色| 国一区二区在线观看| 亚洲女女做受ⅹxx高潮| 在线观看国产精品淫| 亚洲国产中文字幕在线观看| 亚洲美女91| 亚洲在线观看免费| 久久蜜桃香蕉精品一区二区三区| 欧美1区2区| 在线中文字幕日韩| 欧美一区影院| 欧美美女福利视频| 精品69视频一区二区三区| 99视频在线精品国自产拍免费观看 | 性18欧美另类| 久热精品视频在线观看一区| 亚洲欧洲在线视频| 亚洲欧美日韩国产一区二区| 久久夜色精品国产亚洲aⅴ| 欧美视频在线观看视频极品| 国产一区二区中文字幕免费看| 亚洲靠逼com| 久久全国免费视频| 亚洲校园激情| 欧美国产精品久久| 精品成人在线视频| 欧美亚洲免费电影| 99re视频这里只有精品| 蜜臀久久99精品久久久画质超高清 | 国产精品色婷婷久久58| 亚洲精品日本| 久久亚洲精品一区二区| 亚洲午夜精品久久久久久浪潮| 麻豆精品国产91久久久久久| 国产精品视频免费在线观看| 一区二区高清| 亚洲国产精品久久久久秋霞影院| 欧美一级免费视频| 国产精品制服诱惑| 亚洲视频欧美在线| 亚洲黄色尤物视频| 久热精品视频在线免费观看| 国产一区二区久久久| 亚洲综合成人婷婷小说| 亚洲精品国产精品乱码不99| 理论片一区二区在线| 一区在线观看视频| 久久青草久久| 久久久久久久波多野高潮日日| 国产亚洲精品高潮| 久久婷婷亚洲| 久久久免费观看视频| 国语自产精品视频在线看抢先版结局 | 最新日韩在线| 欧美伊人影院| 国产欧美日韩亚洲一区二区三区| 宅男噜噜噜66国产日韩在线观看| 亚洲国产美女| 欧美黄色aa电影| 亚洲最黄网站| 一区二区三区产品免费精品久久75 | 午夜伦欧美伦电影理论片| 宅男66日本亚洲欧美视频| 国产精品第一区| 欧美一区二区三区免费观看| 午夜精品福利电影| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美大成色www永久网站婷| 亚洲国产毛片完整版| 亚洲国产精品成人久久综合一区| 免费看亚洲片| 一本久道久久久| 亚洲欧美精品伊人久久| 国内精品久久久| 欧美电影在线观看| 欧美人与性禽动交情品| 亚洲欧美日韩国产中文| 欧美一级电影久久| 亚洲免费av网站| 亚洲男人的天堂在线观看| 狠狠色丁香久久综合频道| 欧美成人tv| 国产精品jizz在线观看美国| 欧美在线亚洲综合一区| 久久精品视频99| 99re成人精品视频| 亚洲欧美资源在线| 一区二区三区在线不卡| 亚洲精品一区二区在线| 国产精品一区二区三区四区五区| 久久亚洲综合色| 欧美日韩一区二区在线视频| 久热精品在线视频| 欧美日韩三级视频| 久久美女性网| 欧美日韩午夜在线| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩国产黄| 久久免费视频这里只有精品| 欧美精品v国产精品v日韩精品| 欧美在线91| 欧美日韩国产成人| 免费久久99精品国产自| 国产精品拍天天在线| 国产综合在线看| 夜夜爽www精品| 午夜在线视频观看日韩17c| 91久久精品美女高潮| 亚洲香蕉网站| 99亚洲视频| 久久久蜜桃精品| 亚洲欧美激情视频| 欧美高清在线一区| 欧美v亚洲v综合ⅴ国产v| 国产无一区二区| 一区二区三区偷拍| 亚洲日本视频| 久久久久久色| 久久gogo国模裸体人体| 欧美午夜精品久久久久久浪潮 | 久久av一区| 欧美与黑人午夜性猛交久久久| 欧美激情一区三区| 巨胸喷奶水www久久久免费动漫| 国产精品豆花视频| 亚洲精品美女在线| 91久久久在线| 久久影院亚洲| 美乳少妇欧美精品| 国产一区二区丝袜高跟鞋图片| 宅男精品视频| 性视频1819p久久| 国产精品久久久久久久久久免费看| 亚洲经典自拍| 日韩亚洲欧美在线观看| 欧美激情导航| 亚洲免费观看视频| 亚洲视频狠狠| 国产精品日本| 久久精品国产亚洲a| 久久一区二区三区四区五区| 国产自产2019最新不卡| 欧美在线观看一区二区三区| 久久精品国产在热久久| 国产精品亚洲精品| 午夜亚洲视频| 榴莲视频成人在线观看| 亚洲福利视频网站| 欧美日韩高清区| 中文亚洲欧美| 久久精品国产77777蜜臀| 国产亚洲一区二区三区在线观看| 性8sex亚洲区入口| 米奇777超碰欧美日韩亚洲| 亚洲电影自拍| 欧美日韩国产综合久久| 亚洲综合导航| 蜜臀av性久久久久蜜臀aⅴ| 日韩午夜在线视频| 国产精品久久久久久久一区探花| 午夜伦欧美伦电影理论片| 久久精品首页| 亚洲欧洲一区二区在线播放 | 激情久久综合| 欧美另类videos死尸| 欧美一区二区日韩一区二区| 欧美成人一区二区在线| 一本久久综合| 国产香蕉久久精品综合网| 夜夜嗨av一区二区三区| 亚洲天堂久久| 久久综合伊人| 一区二区三区日韩欧美| 国产精品久久网站| 久久中文精品| 亚洲午夜激情在线| 欧美黄色一区| 亚洲欧美综合v| 亚洲免费高清视频| 国内精品久久久| 欧美日韩一二区| 久久网站免费| 亚洲欧美韩国| 亚洲精品一区二区三区福利| 欧美综合国产| 亚洲欧美国产另类| 亚洲精品少妇30p| 国产自产女人91一区在线观看| 欧美日韩国产免费观看| 久久久久国产精品一区| 亚洲一区二区动漫|