数据结构_01

冒泡排序

冒泡排序就是从数组的最底部不断的往上寻找的过程,当下面的大于上面的就换一下,每循环一次最小的值就到了最上面一次,然后下一次循环就只需要从最底部到最上面的第二个了,代码如下:

def bubble_sort(a):
    for i in range(len(a)):
        for j in range(len(a)-1, i, -1):
            if a[j] < a[j - 1]:
                temp = a[j]
                a[j] = a[j-1]
                a[j-1] = temp

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

其中rang(xx,xx,-1)表示逆序

简单选择排序

简单选择排序与冒泡排序不同的在于此方法仅用于比较,最后再进行交换,原理:从第一个开始,将0作为最小值的记号,然后不断的往后找,找到比记号小的值,然后把当前的值记为记号,遍历完一次之后将这个记号与最初的记号相比较,如果不一样就代表找到了新的最小值,然后把标记的最小值放到最前面去,这样完成了将最小的值放到0的操作了,继续接下来的操作,代码如下:

def selectsort(a):
    for i in range(len(a)):
        min = i
        for j in range(i+1, len(a)):
            if a[min] > a[j]:
                min = j
        if min != i:
            temp = a[min]
            a[min] = a[i]
            a[i] = temp
    return a
a = [9, 1, 5, 8, 3, 7, 4, 6, 2]
selectsort(a)
print(a)

直接插入排序

直接插入排序需要在输入的数组内加个“哨兵”,过程就是将5 3 4 6 2 改成0 5 3 4 6 2.其中0就是哨兵,开始:从第二个数字开始,将0改为第二个数字的值,3 5 3 4 6 2,然后开始比较,从第二个减一开始,如果比哨兵的数字大,就往后移一个单位,直到不大了或者到头了,就将这个值用哨兵的值代替,看代碼把:

def insertsort(a):
    a = [0] + a
    # print(a)
    for i in range(2, len(a)):
        a[0] = a[i]
        while a[i-1] > a[0]:
            a[i] = a[i-1]
            i = i -1
        if i == 1:
            a[1] = a[0]
        else:
            a[i] = a[0]
    a = a[1:len(a)]
    return a
a = [9, 1, 5, 8, 3, 7, 4, 6, 2]
a = insertsort(a)
print(a)

希尔排序

希尔排序其实挺复杂的,但是谈起希尔排序就应该想到插入排序,可以讲希尔排序就是插入排序的升级版本,原理如下,就是讲整个数组分组,将数组总长度除二作为间隔,在整个数组以间隔取到几个数字之后,将这几个数字进行直接插入排序。接下较为详细的可参照如下链接:

希尔排序介绍
代码如下:

from Data_Structure import insert_sort as insert
def shell_sort(a):
    increment = len(a) // 2
    while (increment != 0):
        # for i in range(0, ((len(a)-1)//increment+1)*increment,increment):
        for i in range(0, increment):
            numpy = []
            for j in range(0, (len(a) - 1 - i) // increment + 1):
                numpy.extend([int(a[i + increment * j])])
            numpy = insert.insertsort(numpy)
            for k in range(0, (len(a) - 1 - i) // increment + 1):
                a[i + increment * k] = numpy[k]
            print(a)
        increment = increment // 2
a = [9, 1, 5, 8, 3, 7, 4, 6, 2]
a = [55, 2, 6, 4, 32, 200, 0, 43, 3, 65, 33, 12, 9, 73, 26, 37]
a = shell_sort(a)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值