常用排序算法
- 常用排序算法
- 一. 冒泡排序(BubbleSort)
- 二. 选择排序(SelectionSort)
- 三. 插入排序(Insertion Sort)
- 待续。。。
一. 冒泡排序(BubbleSort)
- 基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
- 过程:
- 比较相邻的两个数据,如果第二个数小,就交换位置。
- 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
- 继续重复上述过程,依次将第2.3…n-1个最小数排好位置。
- 平均时间复杂度:O(n2)
图片引用
from random import randint
def bubble_sort(arr, order=True):
"""
冒泡排序算法
:param arr:需要排序的数组
:param order:排序方向默认为True True为顺序 False为逆序
:return: null
"""
for num in range(len(arr)):
for j in range(len(arr)-1, num, -1):
if order:
if arr[j] < arr[j - 1]:
arr[j], arr[j - 1] = arr[j - 1], arr[j]
else:
if arr[j] > arr[j - 1]:
arr[j], arr[j - 1] = arr[j - 1], arr[j]
return arr
count = int(input('你需要随机多少个数进行排序?\n'))
my_arr = []
for i in range(count):
my_arr.append(randint(0, count*10))
print('随机数列为', my_arr)
bubble_sort(my_arr)
print('排序后的数列为', my_arr)
你需要随机多少个数进行排序?
12
随机数列为 [94, 27, 0, 18, 20, 37, 96, 32, 115, 25, 52, 4]
排序后的数列为 [0, 4, 18, 20, 25, 27, 32, 37, 52, 94, 96, 115]
二. 选择排序(SelectionSort)
- 基本思想:
在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
…
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。 - 过程:
第一次找到最小的一个元素,和第一个元素交换
第二次找到第二小的一个元素,和第二个元素交换
第三次找到第三小的一个元素,和第三个元素进行交换
…
第N-1次找到第二大的元素,和倒数第二个位置进行交换 - 平均时间复杂度:O(n2)
- 图片引用
def selection_sort(arr, order=True):
"""
选择排序算法
:param arr:需要排序的数组
:param order:排序方向默认为True True为顺序 False为逆序
:return:返回排序号了的数组
"""
for num in range(len(arr)-1):
index = num
for j in range(num+1, len(arr)):
if order:
if arr[j] < arr[index]:
index = j
else:
if arr[j] > arr[index]:
index = j
if index != num:
arr[num], arr[index] = arr[index], arr[num]
return arr
三. 插入排序(Insertion Sort)
- 基本思想:
在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
插入排序
2. 平均时间复杂度:O(n2)
def insertion_sort(arr, order=True):
"""
插入排序算法
:param arr: 需要排序的数组
:param order:排序方向默认为True True为顺序 False为逆序
:return:
"""
for num in range(len(arr)-1):
for j in range(num+1, 0, -1):
if order:
if arr[j] < arr[j - 1]:
arr[j], arr[j - 1] = arr[j - 1], arr[j]
else:
break
else:
if arr[j] > arr[j - 1]:
arr[j], arr[j - 1] = arr[j - 1], arr[j]
else:
break
return arr
待续。。。