第一周新人/回炉任务
作为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之前能弄好呢。