演算法三之歸併排序

來源:互聯網
上載者:User

標籤:

快速排序,應用到分治法。

下面先瞭解一下什麼是分治法?

分治法,顧名思義,分而治之。先將問題進行分解,然後將分離的問題進行求解,最後將所有分離的解進行合并,得到最終解。

分治法,“大事化小,小事化了,了後一合,大事得解”嗯哪,就是這樣。。。。

那麼瞭解了分治法以後,再來解決問題,歸併排序。(其實演算法中有那麼多排序一直搞不清楚,也分不清,他怎麼就叫這個名字,雖然知道了名字,但是還是不知道是怎樣解決問題的,怎麼解決這個問題呢?這是費解。。。。。還沒有想出來很好 的辦法來記住。只好先死記硬背了)

好了廢話不多說,進行分析求解。

SPARKS語言

procedure MERGESORT(low,high)

  integer low,high;

  if low<high

    then mid<-(low+high)/2;//分割點

    call  MERGESORT(low,mid)//對前一部分進行排序

    call MERGESORT(mid+1,high)//對後一部分進行排序

       call MERGE(low,mid,high)//最後將已經排序好的進行合并。

  endif

end MERGESORT

下面是合并的

procedure MERGE(low,mid,high)//合并就好像玩紙牌是一共兩副牌已排序,然後將兩副牌整合成一副牌的過程分別比較兩副牌的大小,放在另外一個位置最後在倒回原來的位置。

  integer l,h,j,low,mid,high

  global A(low,high);local B(low,high)

  l<-low;h<-low;j<-mid+1

  while h<=mid and j<=high do

    if A(h)<A(j) then B(i)<-A(h);h<-h+1

          else B(i)<-A(j);j<-j+1

    endif

   i<-i+1;

  repeat

  if h>mid then for k<-j to high do //如果其中一副牌已經完了,那麼另外剩餘的拍之間放到一副牌理即可

          B(i)<-A(k);i<-i+1

          repeat

      else for k<-h to mid do

          B(i)<-A(k);i<-i+1

          repeat

    endif

  for k<-low to high do//倒到原來的位置

    A(k)<-B(i)

  repeat

end MERGE

演算法三之歸併排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.