时间复杂度为o(n^2)的排序算法
1、选择排序
2、插入排序
3、冒泡排序
4、希尔排序(插入排序的改进)
一、选择排序
代码:
def selectionSort(arr):
for i in range(len(arr)):
minindex=i
for j in range(i,len(arr)):
if arr[j] < arr[minindex]:
minindex = j
arr[i],arr[minindex]=arr[minindex],arr[i]
return arr
a=[3,5,6,2,6]
print selectionSort(a)
二、插入排序
代码:
def insertionSort(arr):
for i in range(1,len(arr)):
# print i
for j in reversed(range(1,i+1)):
if arr[j] < arr[j-1]:
arr[j],arr[j-1] =arr[j-1],arr[j]
else:
break
return arr
a=[3,5,6,2,6,6,5,3,2,1,5,6,7,8,9,5,4,3,2]
print insertionSort(a)
三、冒泡排序
代码:
def bubbleSort(nums):
for i in range(len(nums)-1): # 这个循环负责设置冒泡排序进行的次数
for j in range(len(nums) - i - 1): # j为列表下标
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
return nums
a=[3,5,6,2,6,6,5,3,2,1,5,6,7,8,9,5,4,3,2]
print bubbleSort(a)
四、希尔排序(插入排序的改进)
代码:
def shellSort(arr):
n=len(arr)
h=1
while h<n/3:
h=3*h+1
while h>=1:
for i in range(h,n):
j=i
while j>=h and arr[j] < arr[j-h]:
arr[j], arr[j-h] = arr[j-h], arr[j]
j-=h
h=h/3
return arr
a=[3,5,6,2,6,6,5,3,2,1,5,6,7,8,9,5,4,3,2]
print shellSort(a)
参考资料
1、https://blog.csdn.net/ningmengbaby/article/details/77885954
2、慕课《算法与数据结构》视频