単純な集計ソート

2754 ワード

ええ...私はずっとデータ構造を書いているのが少し退屈かもしれないことに気づいた.そこで私はよく使うアルゴリズムを書くつもりです.それに複雑な私も
今日は、簡単な集計ソートを書きます.泡が出たり並べ替えたりしたいと思っていました.しかし、書くときは、よく終わったので、面白いソートアルゴリズムを書くことにしました.
 
並べ替えて並べ替えて、並べ替えのアルゴリズムを熟知するのはすべてよく知らないことはできないでしょう.だから、私は理論をたくさん話しません(実は、私もよく分かりません).要するに、集計ソートの核心思想を理解すればいい.もちろん、pythonを使用して実装します.私は最近pythonを勉強しているからです.pythonは面白いと思います
問題があれば、指摘してください.
コードは次のとおりです.
# -*- coding: cp936 -*-
#---------------------------------------------
#                                             
#author   chile                                    
#version  1.0                                  
#since                                        
#date   2014-02-18                                   
#desc                                             
#                                            
#                                            
#                                             
#---------------------------------------------

class MergeSort:
    def __init__(self):
        self.src = []
        self.help  = []
    
    def sort(self,src):
        if len(src) == 0:
            return
        self.src = src
        self.initTarget()
        low , high = 0 , len(src) - 1
        self.megersort(low,high)
    
    #  python        ,       
    def initTarget(self):
        target = self.help
        for i in range(len(self.src)):
            target.append(0)
    
    #     
    def megersort(self,low,high):
        if low >= high:
            return
        mid = low + (high - low ) / 2
        self.megersort(low,mid)
        self.megersort(mid+1,high)
        self.merge(low,mid,high)
    
    #     (        ,      ,          )
    def merge(self,low ,mid , high):
        src , help = self.src , self.help 
        for i in range(low,high+1):
            help[i] = src[i]
        
        i , j = low , mid + 1
        for k in range(low,high + 1):
            if i > mid:
                src[k] = help[j]
                j += 1
            elif j > high:
                src[k] = help[i]
                i += 1
            elif help[i] < help[j]:
                src[k] = help[i]
                i += 1
            else:
                src[k] = help[j]
                j += 1
                
                
val = range(15,2,-1)
print val 
sort = MergeSort()
sort.sort(val)
print sort.src