常用排序算法(一)(代码片段)

harryblog harryblog     2022-12-05     387

关键词:

本篇主要介绍排序算法中的冒泡排序 选择排序和插入排序

一 冒泡排序

1、思路:首先,列表每两个相邻的数比较大小,如果前边的比后边的大,那么这两个数就互换位置。就像是冒泡一样

2、代码关键点:

  • 趟数:n-1趟
  • 无序区

3、图示说明:依次类推就会得到排序结果。冒泡排序的效率还是很低的

时间复杂度:O(n2)

技术图片

实现代码:

def bubble_sort2(data_list):
‘‘‘
首先, 列表每两个相邻的数如果前边的比后边的大, 那么交换这两个数
算法复杂度O(n²)
关键点:趟 无序区
:param data_list:
:return:
‘‘‘

for i in range(0, len(data_list) - 1):
# i 表示第i趟 有序区有i个数
exchange = False
for j in range(0, len(data_list) - i - 1):
if data_list[j] > data_list[j + 1]:
data_list[j], data_list[j + 1] = data_list[j + 1], data_list[j]
exchange = True
if not exchange: # 如果在1趟没有进行交换证明已经排好序了 提前终止
return

二 选择排序

1、思路:一趟遍历完记录最小的数,放到第一个位置;在一趟遍历记录剩余列表中的最小的数,继续放置

2、代码关键点:

  • 无序区
  • 最小数的位置

时间复杂度:O(n2)

def select_sort(li):
    for i in range(0, len(li) - 1):
        # 第i趟 有序区范围:[0:i] 无序区范围:[i:n]
        min_loc = i  # 最小数
        for j in range(i + 1, len(li)):
            if li[min_loc] > li[j]:
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]

三 插入排序

1、思路:元素被分为有序区和无序区两部分。最初有序区只有一个元素。每次从无序区中选择一个元素,插入到有序区的位置,直到无序区变空。

2、代码关键点:

  • 摸到的牌
  • 手里的牌

3、图示说明

技术图片

插入后:

技术图片

技术图片

技术图片

实现代码

‘‘‘
推算过程 li = [10,5,7,9,8,3 ]
第一趟:i = 1 j = 0 tmp = 5  条件满足j>=0  并且 li[j](10) > tmp(5) 进入循环 li[j+1](5) = li[j](10) j=-1 [5,10,7,9,8,3]
第二趟:i = 2 j = 1 tmp = 7  条件满足j>=0  并且 li[j](10) > tmp(7) 进入循环 li[j+1](7) = li[j](10) j=0 [5,7,10,9,8,3] 
第三趟: i = 3 j = 2 tmp = 9  条件满足j>=0  并且 li[j](10) > tmp(9) 进入循环 li[j+1](9) = li[j](10) j=1 [5,7,9,10,8,3]
第四趟:i = 4 j = 3 tmp = 8  条件满足j>=0  并且 li[j](10) > tmp(8) 进入循环 li[j+1](8) = li[j](10) j=2 [5,7,9,8,10,3] 再次满足 条件满足j>=0  并且 li[j](9) > tmp(8) 进入循环 li[j+1](8) = li[j](9) j=1 [5,7,8,9,10]

‘‘‘
def insert_sort(li):
    for i in range(1, len(li)):
        # i即表示趟数,也表示摸到的牌的下标
        # j表示手里最后一张牌
        j = i - 1
        tmp = li[i]
        while j >= 0 and li[j] > tmp:
            li[j + 1] = li[j]
            j -= 1
        li[j + 1] = tmp

 

几种常用排序算法(代码片段)

八大常用排序算法详细分析包括复杂度:排序有可以分为以下几类:(1)、交换排序:冒泡排序、快速排序(2)、选择排序:直接选择排序、堆排序(3)、插入排序:直接插入排序、希尔排序(4)、归并排序(5)、基数排序(桶排序) ... 查看详情

常用算法之----选择排序插入排序和希尔排序(代码片段)

一些说明我将会写一系列关于算法的博客,因为我是程序员,并不是计算机科学家,也即我是搞工程的,并不是搞学术的,所以对于我来说,最重要的就是1.有哪些算法2.这些算法的原理3.这些算法的实现4.这些算法的效率 而... 查看详情

常用排序算法(代码片段)

一、冒泡排序   冒泡排序是最简单的排序算法。假设数组一共有n个元素,元素最大下标为n-1,冒泡排序的具体做法是:第一趟在序列(A[0]~A[n-1])中从前往后进行两个相邻元素的比较,若前者大,则交换,... 查看详情

来都来了,你确定不看看常用的冒泡排序算法<一>!(python版本图文并茂!!!!)(代码片段)

常见的排序!!冒泡排序冒泡排序       基本概念:              •冒泡排序(英语:BubbleSort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺... 查看详情

八大常用排序算法详细分析包括复杂度,原理和实现(代码片段)

八大常用排序算法详细分析包括复杂度,原理和实现如下:1.冒泡排序1.1算法原理:S1:从待排序序列的起始位置开始,从前往后依次比较各个位置和其后一位置的大小并执行S2。 S2:如果当前位置的值大... 查看详情

c++26常用算法(代码片段)

目录 一、概述1.1常用遍历算法1.1.1算法简介1.1.2for_each遍历算法1.1.3transform遍历算法1.2常用查找算法1.2.1算法简介1.2.2find查找算法1.2.3find_if查找算法1.2.4adjacent_find查找算法1.2.5binary_search查找算法1.2.6count查找算法1.2.7count_if查找算法1... 查看详情

大厂敲门砖,通过动态效果图带你掌握常用算法(代码片段)

目录一、算法思维导图二、算法分类三、冒泡排序1、基本思想2、动态效果图3、代码实现4、速度测试四、选择排序1、基本思想2、动态效果图3、代码实现4、速度测试五、插入排序1、基本思想2、动态效果图3、代码实现4、速度测... 查看详情

php常用的排序算法与二分法查找(代码片段)

一:归并排序将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(MergeSort)就是利用归并思想对数列进行排序。根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。1. 从下往上的归并排序:将待... 查看详情

几种常用排序整理(代码片段)

排序分为内排和外排:三种基本的内排算法:1.插入排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,而插入排序的基本操作就是将一个数据插入到已经排好... 查看详情

常用排序算法(代码片段)

常用排序算法 目录一、冒泡排序二、选择排序三、插入排序四、快速排序五、堆排序六、归并排序七、基数排序八、希尔排序九、桶排序十、总结一、冒泡排序1、思路:首先,列表每两个相邻的数比较大小,如果前边的比... 查看详情

排序算法(代码片段)

一、冒泡排序常用的也是简单的排序算法个人理解:步骤:往后对比、找最值、换最值第一层i循环次数就是要排序数组的个数第二层j循环可以每次都从第一个数开始往后对比,如果大小于就交换,保证对比值一直都是最值第二... 查看详情

常用排序算法(代码片段)

简述一些常用算法,并用代码实现它。注:动图是在网上找的。(1)冒泡排序核心思想:交换序列中相邻两个整数。 测试代码:1voidbubble_sort(void)23/*4*冒泡排序:以降序为例进行说明5*比较相邻的元素,将值最小的元素交换... 查看详情

基本算法-快速排序(代码片段)

...前言    本文介绍一种排序算法——快速排序,是常用的排序算法之一。以下是本篇文章正文内容,包括算法简介、算法特点、算法实现和C++示例。一、快速排序简介    快速排序法又称分割交换排序法ÿ 查看详情

常用的排序算法(代码片段)

排序算法这篇博文主要讲解一下主流的几大排序算法选择排序思路选择排序应该是这么多排序算法中最简单的一种排序算法了,主要思路是找到数组中最小的元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是... 查看详情

常用算法之冒泡选择插入快排(代码片段)

常用简单算法一、冒泡排序冒泡排序的基本思想是,对相邻的元素进行两两比较,假设这连个数字是, a、b 同时排序规则是升序,如果a>b则他们位置进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端... 查看详情

常用排序算法总结(代码片段)

排序算法目录排序算法1.排序算法概述1.1什么是排序算法?1.2、排序术语1.3算法总结1.4算法分类1.5比较排序与非比较排序1.5.1比较排序1.5.2非比较排序2.排序算法具体实现2.1冒泡排序2.1.1算法思想2.1.2算法描述2.1.3算法实现(1)数组... 查看详情

常用排序算法(代码片段)

 常用排序名称复杂度说明备注冒泡排序Bubble SortO(N*N)将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 插入排序Insertion sortO(N*N)逐一取出元素,在已经排序的元素序列中从后向前扫描... 查看详情

常用算法之----选择排序(代码片段)

...有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)b) 简单选 查看详情