首页 > 编程语言 > 详细

简单排序和二分查找

时间:2021-07-21 23:03:41      阅读:33      评论:0      收藏:0      [点我收藏+]

排序算法

概念

排序算法是为了让一串数据能够按照要求排列的方法。

主要的内部排序可看下图,今天主要讲:冒泡排序和选择排序。

技术分享图片

 

时间复杂度

平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。

线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;

O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序

线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

技术分享图片

稳定性

稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。

不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

名词解释:
n:数据规模
k:
""的个数
In
-place:占用常数内存,不占用额外内存
Out
-place:占用额外内存
稳定性:排序后
2 个相等键值的顺序和排序之前它们的顺序相同

 

冒泡排序

冒泡排序的算法是:相邻的数据比较,较大的值往后移,得出最大值后再重复该过程。冒泡排序也是最简单的排序之一。

技术:

for嵌套

外面的for控制比较的轮次

里面的for控制每一轮比较的次数

nums = [9, 6, 8, 2, 5]
L = len(nums)-1
for x in range(0, L):
for y in range(0, L - x):
if nums[y] > nums[y + 1]:
nums[y], nums[y + 1] = nums[y + 1], nums[y]
print(nums)

 

选择排序

概念:第一个数据依次和后面比较,小的数据往前移,得到最小值后,再将第二个数据依次和后面对比,以此类推。

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n2) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处就是不占用额外的内存空间。

nums = [9, 6, 10, 12, 5]
l = len(nums)
for x in range(l):
    min = x
    for y in range(x + 1, l):
        if nums[y] < nums[min]:
            min = y
    nums[x], nums[min] = nums[min], nums[x]
print(nums)

 

二分查找

在进行排序之前,一定要保证数据时有序的,数据需要从小到大进行排序。[2,5,6,8,9,12,25,456]

def href_find(nums, search_num):
    max_index = len(nums)-1
    min_index = 0
    mid_index = (min_index + max_index) // 2
    while True:  # 无限循环
        # 查询
        if nums[mid_index] == search_num:
            return True
        if nums[mid_index] > search_num:
            max_index = mid_index - 1
            mid_index = (min_index + max_index) // 2
        elif nums[mid_index] < search_num:
            min_index = mid_index + 1
            mid_index = (min_index + max_index) // 2
    # 如果出现交叉,说明没有该数据
        if max_index < min_index:
            return False

 

简单排序和二分查找

原文:https://www.cnblogs.com/wddwyw-jyb/p/15038759.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!