Skip to content
Snippets Groups Projects

u4

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by sigmum96
    snippetfile1.txt 2.79 KiB
    
    def mergesort(A):
        if len(A) <=9:
            return insertsort(A)
        else:
            m= len(A)//2
            return merge( mergesort(A[:m]), mergesort(A[m:]))
    
    def merge (low,high):
        res= []
        i,j = 0,0
        while i < len(low) and j <len(high):
            if low[i] <= high[j]:
                res.append(low[i])
                i=i+1
            else:
                res.append(high[j])
                j=j+1
        res= res+low[i:]
        res= res+high[j:]
        return res
        
    def insertsort(seq):
        x=1
        while x < len(seq):
            key= seq[x]
            k=x-1
            while k>=0 and seq[k]>key:
                seq[k+1]= seq[k]
                k= k-1
            seq[k+1]=key
            x += 1
        return seq   
    
    
    def parent(i):
        return i//2
    def left(i):
        return i*2
    def right(i):
        return i*2+1
    def heap_size(H):
        return H[0]
    def dec_heap_size(H):
        H[0]= H[0]-1
        
    def max_heapify (H, pos):
        left_t = left (pos)
        right_t = right(pos)
        if left_t<=heap_size(H) and H[left_t]>H[pos]: 
            biggest = left_t
        else:
            biggest = pos
        if right_t<=heap_size(H) and H[right_t]>H[biggest]: 
            biggest = right_t
        if biggest != pos:
            H[pos], H[biggest] = H[biggest], H[pos] 
            max_heapify( H, biggest )
            
    def build_max_heap(H):
        H[0]=len(H)-1
        for i in range(heap_size(H)//2,0,-1):
            max_heapifiy(H,i)
            
    def buildPriorityQueue(tL):
        tL[0]=len(tL)-1
        for i in range(heap_size(tL)//2,0,-1):
            max_heap_prio(tL,i)
            
    def max_heap_prio (tL, pos):
        left_t = left (pos)
        right_t = right(pos)
        if left_t<=heap_size(tL) and (tL[left_t])[1]>(tL[pos])[1]: 
            biggest = left_t
        else:
            biggest = pos
        if right_t<=heap_size(tL) and (tL[right_t])[1]>(tL[biggest])[1]: 
            biggest = right_t
        if biggest != pos:
            tL[pos], tL[biggest] = tL[biggest], tL[pos] 
            max_heap_prio( tL, biggest )
    
    def insertp(pQ,nT):
        pQ.append(nT)
        pQ[0] += 1
        pos= len(pQ)-1
        testpos(pQ,pos)
    
    def testpos(pQ,pos):
        if (pQ[parent(pos)])[1] > (pQ[pos])[1]:
            return pQ
        else:
            pQ[parent(pos)],pQ[pos] = pQ[pos],pQ[parent(pos)]
            testpos(pQ, parent(pos))
        
    def isEmpty(pQ):
        return (heap_size(tL)>0)
    
    def removeTask(pQ):
        if isEmpty(pQ):
            return ("None")
        else:
            task= pQ[1]
            del pQ[1]
            pQ= buildPriorityQueue(pQ[1:])
            return (task)
            
    def counting_sort(A, k): 
        size = len(A)
        C = [0 for i in range(0, k+1)]
        for j in range(0, size): 
            C[A[j]] += 1
        for i in range(1, k+1): 
            C[i] += C[i-1]
        for i in range(size-1):
            while C[A[i]]-1>i: 
                C[A[i]] -= 1
                A[C[A[i]]],A[i]  = A[i],A[C[A[i]]]
        return A
        
    
    
    li=[2,2,4,1,2,2,6,2,3,4,1,4,2,3,5,4,2,2,4,7,4]
    print("A1:")
    print(mergesort(li))
    print("countingsort:")
    print(counting_sort(li,8))
    
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment