排序的三个基础算法 (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