排序的三个基础算法 (python实现)

排序的三个基础算法 (python实现)#

自己动手丰衣足食

 
#!/usr/bin/env python
# coding=utf-8
 
''' 一系列排序算法 ,快速,冒泡 (插入排序实现有点糙,改天修改一下)'''
 
import types
import logging
 
#插入排序 可以继续优化模拟不变数组的方式
def insertSort(arr):
    if isinstance(arr,(types.ListType)) and len(arr)>1:
 
        length = len(arr)
        #初始化一个新数组大小和原始一样大
        newarr = [None]*length
        #指向新数组的尾部
        numpoint = 1
        newarr[0] = arr[0]
        #循环原始数组
        for id in range(1,len(arr)):
            #循环新生成数组
            for j in range(numpoint):
                #拿出原始数据每个和新数组的每个比较
                #如果比它大 是最后一个则加到新数组里
                if arr[id]>=newarr[j]:
                    if j+1==numpoint:
                        newarr[numpoint]=arr[id]
                        numpoint=numpoint+1
                        break;
                    else:
                        continue
                #如果比它小 则让新数组后面的依次往后换位
                else:  
                    temp = arr[id]
                    numpoint = numpoint +1
                    for x in range(j,numpoint):
                        newarr[x],temp = temp,newarr[x]
                    break;
        return newarr
    else:
        logging.warning("not a arr at all")
        return None
 
#冒泡排序
def bubbleSort(arr):
    if isinstance(arr,(types.ListType)) and len(arr)>1:
        #第一遍循环交换
        for id in range(len(arr)-1):
            #第二遍循环交换
            for j in range(len(arr)-id-1):
                if arr[j]>arr[j+1]:
                    arr[j],arr[j+1]=arr[j+1],arr[j];
        return arr
    else:
        logging.warning("not a arr at all")
        return None    
 
#选择排序
def selectSort(arr):
    if isinstance(arr,(types.ListType)) and len(arr)>1:
        for id in range(len(arr)-1):
            #初始化一个tempindex 存放每次最小的地址
            tempindex = id;
            for j in range(id,len(arr)-1):
                if arr[tempindex] > arr[j+1]:
                    tempindex = j+1
            if tempindex != id:
                arr[id],arr[tempindex]=arr[tempindex],arr[id]
        return arr
    else:
        logging.warning("not a arr at all")
        return None
 
posted @ 2015-11-09 17:59  tonnyone  阅读(197)  评论(0编辑  收藏  举报