快速排序算法
快速排序(QuickSort)是一种基于分治法的高效排序算法。它通过选择一个“基准”元素,将数组分成两个子数组,其中一个子数组的所有元素都比基准小,另一个子数组的所有元素都比基准大,然后递归地对这两个子数组进行排序。
以下是快速排序的基本步骤:
1.选择基准:从数组中挑选一个元素作为基准(pivot)。选择基准的方法有多种,比如可以选择第一个元素、最后一个元素、中间元素或随机选择一个元素。
2.分区操作:重新排列数组,使得所有比基准小的元素移到基准前面,所有比基准大的元素移到基准后面。在这个过程中,基准的位置确定下来。
3.递归排序:对基准左右两边的子数组分别重复第一步和第二步的操作,直到每个子数组的大小为0或1,此时整个数组已经有序。
使用Python代码实现
def quicksort(arr):if len(arr) <= 1:return arrelse:pivot = arr[len(arr) // 2] # 选择中间位置的元素作为基准left = [x for x in arr if x < pivot] # 小于基准的元素middle = [x for x in arr if x == pivot] # 等于基准的元素right = [x for x in arr if x > pivot] # 大于基准的元素return quicksort(left) + middle + quicksort(right)# 使用示例
array = [3, 6, 8, 10, 1, 2, 1]
print("原列表:", array)
sorted_array = quicksort(array)
print("排序后列表", sorted_array)
运行结果截图
我们可以看到已经排好序了
练习题
“”"
1.手动在当前项目根目录下创建singer.txt文件,内容如下:
沉默是金,张国荣
少女的祈祷,杨千嬅
暗里着迷,刘德华
难念的经,周华健
2、定义一个singer类(歌手类),包含初始化init方法:
成员属性: 歌曲名
歌手名字
成员方法:fans():打印“XXX歌手的YYY歌曲持续打榜,粉丝为喜欢的歌手打call”
XXX为对象的歌手名字,YYY为对象的歌曲名
3、在歌手类外面完成以下功能:
1)通过程序逐行读取singer.txt文件内容,根据每行数据创建对应歌手对象并赋值,依次将歌手对象存入列表。
2)遍历列表,获取元素并调用对象的fans方法
“”"
class singer:def __init__(self, song_name, singer_name):self.song_name = song_nameself.singer_name = singer_namedef fans(self):print(f'{self.singer_name}歌手的{self.song_name}歌曲持续打榜,粉丝为喜欢的歌手打call')def read_singer():list_tx = []# str = '13223,123'# str.split()with open('./singer.txt', 'r', encoding='utf-8') as rds:while True:line = rds.readline().strip()if len(line) <= 0:breaklin = line.split(',')list_tx.append(singer(lin[0], lin[1]))# print(list_tx[1].song_name)for i in list_tx:i.fans()if __name__ == '__main__':read_singer()
坚持分享 共同进步 如有错误 欢迎指出