排序和搜索

排序和搜索

排序算法:是一种能将一串数据按照特定顺序进行排列的一种算法

一. 排序算法的稳定性

稳定性: 稳定排序算法会让原本有相等键值的记录维持相对次序,也就是如果一个排序算法时稳定的,当有两个相同键值的记录R和S,且在原本的列表中R出现在S的前面,在排序过的列表中R也将是在S之前

(稳定的算法可能更适合一些实际情况的需要,排序之前的原序列里的顺序可能隐含一些有用的信息,表示一些与实际问题相关的性质,稳定的排序算法将维持这些信息和性质)

适应性:排序操作可能被用于处理不同长度的序列,复杂度的描述方式考虑了这一问题,但是,即使是同样长的被排序序列,情况也很不一样,例如,有时被排序的序列可能很接近排好序的形式,或者原本就是已经排好序的序列,在这些情况下,一个序列算法能否更快完成工作,排序算法的适应性考虑这个问题,如果一个排序算法对接近有序的序列工作得更快,就称这种算法具有适应性,具有适应性的算法也有实际价值,因为实际中常常需要处理接近排序的序列

二. 排序算法的分类

为了理解各种排序算法在想法和做法等方面的异同,人们经常把经典的排序算法分为一些类别,常见类别:

  • 插入排序
  • 选择排序
  • 交换排序
  • 分配排序
  • 归并排序
  • 外部排序

三. 冒泡排序

def bubble_sort(alist):
    n = len(alist)
    count = 0
    for j in range(n - 1):
        for i in range(0, n - 1 - j):
            if alist[i] > alist[i + 1]:
                alist[i], alist[i + 1] = alist[i + 1], alist[i]
                count += 1
        if count == 0:
            print(alist)
            return
    print(alist)


if __name__ == "__main__":
    bubble_sort([6, 5, 4, 3, 2, 1])
时间复杂度
 * 最优时间复杂度:O(n) 表示遍历一次没有发现任何可以交换的元素,排序结束
 * 最坏时间复杂度: O(n²)
 * 稳定性: 稳定

 暗号: 一个班长 比较两个 找到最大的放最后

猜你喜欢

转载自blog.csdn.net/weixin_46129834/article/details/113568694