<
>

排序算法原理与实现[冒泡、选择、插入、快速、哈希、计数](

2020-06-28 07:41:53 来源:易采站长站 作者:易采站长站整理

1. 冒泡排序:

原理

冒泡排序算法的基本原理就是比较相邻两个数字的大小。将两个数中比较大的那个数交换到靠后的位置,不断交换下去就可以将最大的那两个数放到队列的尾部。然后重头再次交换)(交换list.lenght-1次),直到将数列排成有序数列。

代码实现

# -*- coding:utf-8 -*-
"""
Author: leadingme
Mail:leadingme@qq.com
MyWebsite:leadingme.top
"""

import timeit

List = [7, 5, 9, 3, 5, 1, 12, 10, 15, 9]

def bubbleSort(List):
"""
冒泡排序
:param List:
:return:
"""
if len(List) = List[j+1]:
List[j], List[j+1] = List[j+1], List[j] # 如果前一个数比后一个数大,则调换位置
return List

if __name__ == '__main__':
print(List)
print(bubbleSort(List))
runtime = timeit.timeit("bubbleSort(List)","from __main__ import bubbleSort, List",number=1000)
print(runtime)


2. 选择排序:

原理

简单来说,选择排序只做了一件事件,那就是从数列中选择最大(最小)的那个数,将这个数放到合适的位置。然后抛开这个数的子序列中找最大(最小)的那个数放到合适的位置。然后一直到子序列为空。

代码实现

# -*- coding:utf-8 -*-

"""
Author: leadingme
Mail:leadingme@qq.com
MyWebsite:leadingme.top
"""
from timeit import timeit

List = [7, 5, 9, 3, 5, 1, 12, 10, 15, 9]

"""
# 这个虽简洁易懂,但有重复数字会有有Bug,原因为相同数下标无法确定
def selectSort(List):
if len(List) = min(List[i+1:]): # 如果对应下标数的值大于剩余部分的最小值,交换位置
minIndex = List.index(min(List[i+1:])) # 求剩余部分的最小值小标
List[i], List[minIndex] = List[minIndex], List[i] #满足条件, 交换位置
return List
"""

def selectSort(List):
if len(List) <= 1: # 如果长度小于等于1,直接返回
return List
for i in range(len(List)-1):
min_index = i
for j in range(i+1,len(List)):
if List[j] < List[min_index]:
min_index = j
List[i], List[min_index] = List[min_index], List[i] return List

if __name__ == '__main__':
print(List)
print(selectSort(List))
print(timeit('selectSort(List)','from __main__ import selectSort, List',number=1000))


3. 插入排序:

原理

插入排序首先将数列分为两部分,数列的第一数为left,其余数位right部分。然后将right部分中的数逐一取出,插入到left部分的适当位置。当right部分为空时,left部分就成了一个有序的序列。

暂时禁止评论

微信扫一扫

易采站长站微信账号