七大经典排序算法原理及实现

1 冒泡排序 BubbleSort

1.1 原理:

多次扫描整个数组,每次扫描都比较相邻两个元素,如果逆序,则交换两个元素。

第一次扫描结果是数值最大元素到数组的最后位置,比较的次数是n(数组长度)-1。

第二次扫描,因为最大元素已经在最后位置,所以需要比较的次数为n-2

以此类推,一共需要扫描n-1次。

1.2 算法实现:

两次for循环即可实现。第一层循环控制扫描的次数,第二层循环控制每次扫描需要比较的次数。

交换两个相邻元素利用一个temp的变量即可

1.3 Python代码实现:


if __name__ == '__main__':
Original = input('Please input number split with ,:')
OriginalList = Original.split(',')
OriginalList = list(map(int,OriginalList))
print('Original List',OriginalList)
for i in range(1,OriginalList.__len__()-1):
for j in range(0,OriginalList.__len__()-1):
if OriginalList[j]>OriginalList[j+1]:
a = OriginalList[j]
OriginalList[j] = OriginalList[j+1]
OriginalList[j+1] = a
else:
continue
print('result List',OriginalList)

 2 选择排序 SelectionSort

2.1 原理:

多次扫描整个数组,每次选择一个最小值,加入到结果数组中。

第一次扫描,应该得到数组中最小值,然后需要从原始数组中去掉该最小值,得到一个新的原始数组。

然后对于这个原始数组进行第二次扫描,再得到一个最小值,加入到结果数组。

2.2 算法实现

两个数组,一个是原始数组,另一个是结果数组。

两次for循环,第一层控制扫描数组的次数,第二层控制每次扫描中遍历数组中所有元素,查找出最小值。

需要设定一个最小值变量,用来存储每次扫描中的最小值,然后将最小值加入到结果数组中。并且每次扫描后,原始数组中都应该去掉该次扫描中得到的最小值,得到一个新的原始数组,进入到下一次的扫描中。

2.3 Python代码实现:

if __name__ == '__main__':
Original = input('Please input number split with ,:')
OriginalList = Original.split(',')
OriginalList = list(map(int,OriginalList))
lenth = OriginalList.__len__()
print('Original List',OriginalList)
resultList = []
for i in range(1,lenth+1):
minItem = OriginalList[0]
place = 0
for j in range(1,OriginalList.__len__()):
if OriginalList[j]<minItem:
minItem = OriginalList[j]
place = j
else:
continue
resultList.append(minItem)
OriginalList.pop(place)
print('result List',resultList)

3 插入排序 Insertion Sort

3.1 原理

建立一个结果数组,然后多次扫描原始数组,每次取原始数组其中一个元素,然后遍历结果数组,将元素插入到正确位置。原始数组的所有元素插入完毕后,得到的结果数组自然是有序的数列。

3.2 算法实现:

两层for循环控制,第一层依次取原始数组中的每一个元素,第二层遍历结果数组中的所有元素,将原始数组中取到的元素插入正确的位置。

需要声明一个临时变量,记录需要插入的结果数组的位置。再每次第二层for循环结束后,把从原始数组中取出的元素插入到结果数组中临时变量记录的位置。

3.3 Python代码实现:

if __name__ == '__main__':
Original = input('Please input number split with ,:')
OriginalList = Original.split(',')
OriginalList = list(map(int,OriginalList))
print('Original List',OriginalList)
lenth = OriginalList.__len__()
resultList = []
resultList.append(OriginalList[0])
for i in range(1,lenth):
for j in range(0,resultList.__len__()):
temp = resultList.__len__()
if OriginalList[i]<=resultList[j]:
temp = j
break
else:
continue
resultList.insert(temp,OriginalList[i])
print('ResultList',resultList)

4 快速排序 Quick Sort

5 希尔排序 Shell Sort

6 归并排序 Merge Sort

7 堆排序 Heap Sort



猜你喜欢

转载自www.cnblogs.com/JolinTalk/p/10976274.html
今日推荐