2012年2月11日土曜日

pythonで挿入ソートとマージソートを書いてみた

pythonで挿入ソートとマージソート書いてみました

挿入ソート
#! /usr/local/bin/python
# -*- coding:utf-8 -*-
def insertion_sort(array):
    result=[]
    result.append(array[0])
    for j in range(1,len(array)):
        key=array[j]
        result.append(key)
        i=j-1
        while i>=0 and key<result[i]:
            result[i+1]=result[i]
            result[i]=key
            i-=1
    return result


マージソート


#! /usr/local/bin/python
# -*- coding:utf-8 -*-
import sys
# mergeSort is merge sort function.
# A is array, p is start point and r is end point.
def mergeSort(A,p,r):
    if p<r:
        q=(p+r)/2
        mergeSort(A,p,q)
        mergeSort(A,q+1,r)
        merge(A,p,q,r)
def merge(A,p,q,r):
    #A: array
    #p,q,r: value of array ,p<=q<r
    n1=q-p+1
    n2=r-q
    L=[0]*(n1+1)
    R=[0]*(n2+1)
    for i in range(0,n1):
        L[i]=A[p+i]
    for j in range(0,n2):
        R[j]=A[q+j+1]
    L[n1]=sys.maxint
    R[n2]=sys.maxint
    i=0
    j=0
    for k in range(p,r+1):
        if L[i]<=R[j]:
            A[k]=L[i]
            i+=1
        else:
            A[k]=R[j]
            j+=1

使い方は
挿入ソートはソートしたいリストAを用意し,insertion_sort(A)とやるとソートされた配列が返ってきます
マージソートはソートしたいリストAを用意し,mergeSort(A,0,len(A)-1)で呼び出すともとのリストAがソートされます

データを返すパターンと,void型両方実装してみましたが,統一した方がいいんですかね。。
コードはhttps://github.com/fukkyy/python-algorithm/においています

0 件のコメント:

コメントを投稿