2019-03-17

第一周新人/回炉任务

作为AI组回炉选手,有机会可以把基础再学一遍,个人感觉这是一件很好的事情。本周的任务大体分为这样三大类:

任务
1.装系统、学习vim、学习使用github、翻墙、配环境
2.桶排、插排、快排、归并
3.markdown、搭建博客
  • 先说一波第一点,装系统、学习vim、学习使用github、翻墙、配环境,比较庆幸也比较不幸的一点是这几样在一年前的实习期间就弄好了,想着这星期有些许忙碌,就没有太认真地去重新完成第一点,等啥时候有个小假期,感觉可以去重温一波看看有木有自己不太熟悉的点,搭建一波archlinux。
  • 再说一波第二项任务,说来也惭愧,身为一个大二下的老学姐,在学完数据结构、还未学完算法导论但这几种排序都用其他语言写过的情况下,又回炉重新用python写了一波排序算法,当然在这之中也有所收获,比如好久没有重温python基础知识的我终于能够管住自己沉下心来打好python的基础,同时假如算法导论会考排序算法的话,这几个排序应该能用不同语言自信地写出来了。
    下面是这几种排序算法的代码:
    ①插入排序
def InsertSort(array):
    for j in range(1,len(array)):
        k=array[j]
        i=j-1
        while i>=0 and array[i]>k:
            array[i+1]=array[i]
            i=i-1
        array[i+1]=k
    return array
print(InsertSort([12,34,21,56,78]))
#[12, 21, 34, 56, 78]

插排的原理很简单,从第一个元素开始,取出下一个元素,在已经排序的元素序列中从后向前扫描,如果该元素大于新元素,将该元素移到下一位置,直到找到已排序的元素小于或者等于新元素的位置,将新元素插入到该位置后,其他的数也是如此。

②桶排

def BucketSort(array):
    n = max(array)-min(array)+1
    list=[0 for x in range(0,n)]
    for i in array:
        list[i-min(array)]=list[i-min(array)]+1
    return [i+min(array) for i in range(0,n) for j in range(0,list[i])]

print(BucketSort([11,45,23,76,87,89]))
#[11, 23, 45, 76, 87, 89]

桶排和插排相比起来就更加简单了,上面这段代码中的n代表着桶的数量,array中元素的值是多少就放在对应的桶里就好了,不过就是要注意下最小值的索引以及最大值的索引,再输出出来就排好序了。

③归并

def MergeSort(array):
    if len(array)<=1:
        return array
    mid=int(len(array)/2)#记得int()!!!!slice indices must be integers or None or have an __index__ method
    left=MergeSort(array[:mid])
    right=MergeSort(array[mid:])
    return merge(left,right)
 
def merge(a,b):
    c=[]
    i=0
    j=0
    while i

上面的疯狂感叹号表明了学习python基础的重要性,丢人.jpg。归并排序用分治的思想进行排序,首先大体的是将数组不断的二分,最后进行合并,合并的过程就是比较两个数组最开头的数,小的数先放进c,同时之前有小的数的数组的索引往后加一位,再来比较两个数组开头数的大小,以此类推。

④快排

def QuickSort(array):
    right=[]
    parr=[]
    left=[]
    if len(array)<=1:
        return array
    else:
        p=array[0]
        for i in array:
            if ip:
                left.append(i)
            else:
                parr.append(i)
        right=QuickSort(right)
        left=QuickSort(left)
        return right+parr+left
    
print(QuickSort([12,32,45,21,11]))

快排就是首先选一个数为基准数,其他的数跟这个数比较,小的都在这个数的右边,大的都在这个数的左边,同时左右两边也按照这个原则来排序,直到所有的数都排好了序。

以上是第二部分的任务↑
  • 第三部分的任务首先是Markdown,可以看出已经完成了。博客的话在写这个总结的时候还没弄,但没准在deadline之前能弄好呢。

第一期总结完毕!

你可能感兴趣的:(2019-03-17)