• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

深入分析python 排序

python 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

排序是每个开发人员都需要掌握的技能。排序是对程序本身有一个全面的理解。不同的排序算法很好地展示了算法设计上如何强烈的影响程序的复杂度、运行速度和效率。今天的文章和谈谈大家都熟悉的各种排序使用 Python 如何实现,废话就不多说啦,开干!

选择本文来源gaodai$ma#com搞$$代**码)网@排序

选择排序一般是将初始值设为初始值,再循环后面每个元素与第一个元素比较,最终筛选出一个最小或最大值,最后将有序的数值排在前面,每次选择当前序列的最小值,将其与当前序列的第一个元素交换位置,每迭代一次,当前序列长度减一。迭代结束,即可得到有序序列。 实现代码如下:

def select_s(data):
  # 第一层循环:取出数组中的每个元素
  for i in range(len(data)):
    temp = i  # 拿取一个元素用来比较
    # 第二层循环:从第i后面的一个值开始循环,与data[i]进行比较
    for j in range(i+1,len(data)):
      if data[j] < data[temp]:
        data[temp], data[j] = data[j], data[temp]
  print(data)

调用运行结果:

if __name__ == '__main__':
  data = [14, 31, 14, 6, 18, 24, 2, 40]
  select_s(data)

输出结果:

[2, 6, 14, 14, 18, 24, 31, 40]

插入排序

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

实现代码如下:

def insert_s(data):
  # 第一层循环: 从第二个元素开始循环取出元素,取出的元素再与有序区元素进行比较
  for i in range(1,len(data)):
    temp = data[i]
    j = i-1
    while j>=0 and temp < data[j]:
      data[j+1] = data[j]  
      j = j-1  # 在与前面一个元素进行比较,所以j 需要减1
    # 当j = -1 就跳出循环,将temp值赋给第一个值,即data[0]
    data[j+1] = temp
  print(data)

调用运行结果:

if __name__ == '__main__':
data = [12, 3, 13, 56, 10, 22, 2, 40]
insert_s(data)

输出结果:

[2, 3, 10, 12, 13, 22, 40, 56]

冒泡排序

冒泡排序(顺序形式),从左向右,两两比较,如果左边元素大于右边,就交换两个元素的位置。

其中,每一轮排序,序列中最大的元素浮动到最右面。也就是说,每一轮排序,至少确保有一个元素在正确的位置。

这样接下来的循环,就不需要考虑已经排好序的元素了,每次内层循环次数都会减一。

其中,如果有一轮循环之后,次序并没有交换,这时我们就可以停止循环,得到我们想要的有序序列了。

def insert_s(data):
  # 第一层循环: 从第二个元素开始循环取出元素,取出的元素再与有序区元素进行比较
  for i in range(1,len(data)):
    temp = data[i]
    j = i-1
    while j>=0 and temp < data[j]:
      data[j+1] = data[j]  
      j = j-1  # 在与前面一个元素进行比较,所以j 需要减1
    # 当j = -1 就跳出循环,将temp值赋给第一个值,即data[0]
    data[j+1] = temp
  print(data)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:深入分析python 排序

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址