排序算法

1.直接插入排序

算法思想:

对一组无序数据,比如[4,2,1,3,5],首先以前两个为一个单元进行排序,结果为[2,4];然后再插入一个数字,即[2,4,1],进行排序,结果为[1,2,4];然后再插入一个数字,即[1,2,4,3],进行排序,结果为[1,2,3,4];然后再插入一个数字,即[1,2,3,4,5],进行排序,结果为[1,2,3,4,5]。

代码实现:

# -*- coding:utf-8 -*-

L = [4,2, 1, 3, 5, 7, 6, 9, 8, 0]


###思路一

def direct_insert_sort(numbers):

  for i in range(1,len(numbers)):
    temp = numbers[i]
    j = i-1
    #########################################################
    # 本算法的核心所在!
    while j>=0 and temp<numbers[j]:
      numbers[j+1]=numbers[j]
      j = j-1
    numbers[j+1] = temp
    print(numbers)
    ###########################################################

if __name__=='__main__':
  direct_insert_sort(L)
  print (L)


###思路二

def insertSort(relist):
    len_ = len(relist)
    for i in range(1,len_):
        for j in range(i):
            if relist[i] < relist[j]:
                relist.insert(j,relist[i])  # 若前一项数字大于后一项,则将其(大的一项)被小的一项所代替。
                relist.pop(i+1)  # 用于移除列表下标为:i+1的那一项(相当于是添加了较小的一项,删除了最后的较小的一项)。
                break
    return relist


print(insertSort(L))

2.希尔排序

算法思想:

代码实现:

# -*- coding:utf-8 -*-

###直接插入排序算法
def ShellInsetSort(relist):
    len_ = len(relist)
    for i in range(1,len_):
        for j in range(i):
            if relist[i] < relist[j]:
                relist.insert(j,relist[i])  # 若前一项数字大于后一项,则将其(大的一项)被小的一项所代替。
                relist.pop(i+1)  # 用于移除列表下标为:i+1的那一项(相当于是添加了较小的一项,删除了最后的较小的一项)。
                break
    return relist

###希尔排序
def ShellSort(relist):
    len_ = len(relist)
    dk = int(len_/2)  # 增量
    while(dk >= 1):
        ShellInsetSort(relist)  #调用直接插入排序算法
        dk = int(dk/2)
    return relist

if __name__ == "__main__":
 A = [4,2, 1, 3, 5, 7, 6, 9, 8, 0]
 print(ShellSort(A))

3.选择排序

算法思想:一次每从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 

代码实现:

def selection_sort(list2):
  for i in range(0, len(list2)-1):
    min_ = i
    for j in range(i + 1, len(list2)):
      if list2[j] < list2[min_]:
        min_ = j
    list2[i], list2[min_] = list2[min_], list2[i]
  return list2

A=[4,2, 1, 3, 5, 7, 6, 9, 8, 0]
print(selection_sort(A))

参考资料:https://www.bilibili.com/video/av18176082 from = search seid = 4719489019078203246

4.冒泡排序

算法思想:

①比较相邻的元素。如果第一个比第二个大,就交换他们两个。

②对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

③在步骤①②的基础上,将当前最大的数保留,下标数为0到-2的数字为新的数组。

④在新的数组下依次进行步骤①②。

⑤依次进行以上步骤,直到完成数组排序。

代码实现:

# -*- coding:utf-8 -*-
def bubble_sort(nums):
    for i in range(len(nums) - 1):  # 这个循环负责设置冒泡排序进行的次数
        for j in range(len(nums) - i - 1):  # j为列表下标
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
    return nums

print(bubble_sort([4,2, 1, 3, 5, 7, 6, 9, 8, 0]))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值