算法图解学习(二)

选择排序

具体思路:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

def Is_Sort(arr):           #判断是否排好序
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            return False
    return True

def Select_Sort(arr):
    for i in range(len(arr)):
        smallest_index = i
        for j in range(i+1, len(arr)):
            if arr[j] < arr[smallest_index]:
                smallest_index = j     #找到右侧最小值得索引
        arr[smallest_index], arr[i] = arr[i], arr[smallest_index]
    return arr





nums = [randint(1,100) for i in range(1000)]  #随机生成100个[1-100]的数
start = time.time()
sort_num = Select_Sort(nums)
print(sort_num)
end = time.time() - start   #测试排序所需时间
print(end)       
print(Is_Sort(sort_num))

数组和链表:

1数组是通过元素的位置进行读取的,所以在读取方面效率高。
在插入和删除元素时,由于需要移动元素后面的位置,效率没有链表高

2链表中的每个元素都存储了下一个元素的地址,使一系列随机的内存地址都串在一起,这就导致了读取时效率低,其优势在于插入和删除两方面。

常见数组和链表操作的运行时间

数组 链表
读取 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)

小结:

        数组都是在一起的
        链表都是分开的,其中每个元素都存储了下一个元素的地址
        数组读取速度很快
        链表在插入和删除速度很快
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 9.3.3 快速排序   快速排序将原数组划分为两个子数组,第一个子数组中元素小于等于某个边界值,第二个子数组中的...
    RichardJieChen阅读 5,814评论 0 3
  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 3,890评论 0 0
  • 简单排序 冒泡排序:循环遍历左右比较,较小者左移或较大者后移; 选择排序:在未排序序列中找到最小者元素一次放到已排...
    王然Gondole阅读 5,232评论 0 2
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,608评论 0 12
  • 曾经的你我, 懵懂青涩, 岁月与鲜花虽好, 我却痴呆不入风情。 仅有一朵玫瑰红, 映照脸颊握于手中。 羡煞情侣成双...
    雨婷心飞阅读 1,098评论 0 1