Selection Sort


def SelectionSort(L): 

    Pointer=0   

    while(Pointer!=(len(L)-1)):

        m=L[Pointer]


        for p in range(Pointer,len(L)):

            if L[p]<=m:

                m=L[p]

                pos=p


        (L[Pointer],L[pos])=(L[pos],L[Pointer])


        Pointer+=1

 

    return L



                                                           Insertion Sort


def Insertsort(L):

    Pointer=1

    

    while(Pointer!=len(L)):


        m=L[Pointer]


        for p in range(0,Pointer):

            if L[p]>m:

                pos=p

                

                L.insert(pos,L[Pointer])

  

                L.pop(Pointer+1)


                break

            

        Pointer+=1

    

    return L    


                                                      Merge Sort 

Conquer

def Merge(A,B):


    (m,n)=(len(A),len(B))

    (C,i,j,k)=([],0,0,0)


    while(k<m+n):

        

        if i==m:

            C.extend(B[j:])

            k=k+(n-j)

        elif j==n:

             C.extend(A[i:])

             k=k+(m-i)

        elif A[i]<B[j]:

            C.append(A[i])

            (i,k)=(i+1,k+1)

        else:

            C.append(B[j])

            (j,k)=(j+1,k+1)

          

    return C


Divide 

def mergsort(A):

    n=len(A)

    if n<=1:

        return A

    L=mergsort(A[:n//2])

    R=mergsort(A[n//2:])

    

    B=Merge(L, R)

    

    return (B)