在刚开始接触算法时,我们可能一脸懵,不知从何处下手,尤其是现在使用的语言五花八门,各种语言的实现又不尽相同,所以,在这种情况下,千万不能迷失了自己,掌握了算法的原理,就像解数学公式一样,定理给你了,仔细想想便可以用代码来实现它,前提要养成良好的解题思路.

下面我们来从入门的排序算法开始:

以下都是针对一个无序数组 A = [3,1,5,6,7,2,4,8] 进行排序

1.简单的冒泡排序

初进排序算法,那就来试一下冒泡吧,原理和暴力枚举法差不多,极尽可能的把所有元素都枚举出来,一个个对比,做法简单而又粗暴(很*很暴力).

下面上代码:

'''
冒泡排序算法
'''
def bubblesorft(A):
for i in range(len(A)):#第一层循环,控制排序的次数
for j in range(len(A)-i):#第二层循环,控制前一个元素与后一个元素比大小
if j+1 < len(A):
if A[j] > A[j+1]:
temp = A[j+1]
A[j+1] = A[j]
A[j] = temp
return A A = [3,1,5,6,7,2,4,8]
A = bubblesorft(A)
print(A)

[1, 2, 3, 4, 5, 6, 7, 8]

算法简单,清晰明了,如果看不懂,那就自己敲几遍代码,你很快就会悟了,哈哈

这都不算完,接下来上个简单而又不简单的归并排序算法,你再来悟一下:

2.简单而又不简单的归并排序

说简单是因为你悟透了,说不简单是递归很绕人,其实想明白了何时return,就想明白了此时递归的值.

归并排序在排序时先将数组分成两部分,并分别进行排序,然后再把排好序的两部分整合成一个排序数组.

下面上代码感受一下:

'''
归并排序算法
'''
def mangesorft(A):
if len(A) <= 1:
return A half = int(len(A) / 2)#把列表分成两份
first = mangesorft(A[0:half])#使用了递归,使得最后分的元素越来越小,直至到一个元素,然后返回排序好的列表
second = mangesorft(A[half:len(A)])#使用了递归,使得最后分的元素越来越小,直至到一个元素,然后返回排序好的列表 i = 0
j = 0
newA = []
while i < len(first) or j < len(second):#控制循环次数
if i <len(first) and j < len(second):#归并排序的重点,控制归并的元素下标
if first[i] <= second[j]:
newA.append(first[i])
i += 1
else:
newA.append(second[j])
j += 1
else:
if i < len(first):
newA.append(first[i])
i += 1
if j < len(second):
newA.append(second[j])
j +=1
return newA if __name__ == "__main__":
A = [3,1,5,6,7,2,4,8]
A = mangesorft(A)
print(A)

[1, 2, 3, 4, 5, 6, 7, 8]

对比这两个算法,你有啥想法了没有,如果有,那么恭喜你,咱们可以一起拉着小手跳入算法的坑了,

有了这两个神器,以后遇到算法问题,对于无序的数组或列表,那咱就先来排个序吧,这可是解题的第一步,加油!

顺带讲两个列表和数组去重的小知识(有面试题考过):

A = [1,1,2,2,3,3,4,4,5,5,6,6,7,7]
#普通方法去重
newA = []
def deletequemnents(A):
for i in A:
if i in A:
if i not in newA:
newA.append(i)
return newA
print(deletequemnents(A)) #使用python内置函数set去重
def deletequemn(A):
for i in A:
A = set(A)
return A
print(deletequemn(A))

python3--说简单也不简单的排序算法的更多相关文章

  1. python3实现几种常见的排序算法

    python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  2. [answerer的算法课堂]简单描述4种排序算法(C语言实现)

    [answerer的算法课堂]简单描述4种排序算法(C语言实现) 这是我第一次写文章,想要记录自己的学习生活,写得不好请包涵or指导,本来想一口气写好多种,后来发现,写太多的话反而可读性不强,而且,我 ...

  3. [java初探06]__排序算法的简单认识

    今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...

  4. 排序算法汇总(C/C++实现)

    前言:     本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的 ...

  5. 基本排序算法——冒泡排序java实现

    冒泡排序是原理最简单的一种排序算法,具体思想就不多说了,代码如下: eclipse4.3中编译通过 package sort.basic; import java.util.Arrays; publi ...

  6. 数据结构杂谈(二)简单有趣的地精排序Gnome sort

    很早之前便听说过地精排序的名字,今天自己看来一下,发现这是一种非常简单而且有趣的排序算法. 为什么叫地精排序? 地精排序在2000年由Dr. Hamid Sarbazi-Azad 提出的时候被称作 s ...

  7. 十大经典排序算法+sort排序

    本文转自:十大经典排序算法,其中有动图+代码详解,本文简单介绍+个人理解. 排序算法 经典的算法问题,也是面试过程中经常被问到的问题.排序算法简单分类如下: 这些排序算法的时间复杂度等参数如下: 其中 ...

  8. 十大排序算法总结(Python3实现)

    十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码 ...

  9. 用javascript实现简单排序算法

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 本文为楼主自己的学习记录文章,若有不当之处请斧正. 本文主要记录排序算法 [冒泡排序] 感觉这个是最简单的排序算法了.直接引用维基百科里的 ...

随机推荐

  1. 多线程 fork/join 并行计算

    1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...

  2. 第05组Alpha冲刺(1/4)

    队名:天码行空 组长博客连接 作业博客连接 团队燃尽图(共享): GitHub当日代码/文档签入记录展示(共享): 组员情况: 组员1:卢欢(组长) 过去两天完成了哪些任务:SVN管理工具搭建 展示G ...

  3. mysql查询列定义,是否自增等

    SELECT ORDINAL_POSITION AS Colorder, Column_Name AS ColumnName, data_type AS TypeName, COLUMN_COMMEN ...

  4. Python 开发版本指导与资源

    Python 文档:https://docs.python.org/3/ 下载 下载这些文件 文档版本 Python 3.9(开发中) Python 3.8(稳定) Python 3.7(稳定) Py ...

  5. 如何从OA系统批量整理出邮箱地址,并导入到Foxmail 地址薄中?

    一.打开某位leader的OA,点击查看“下属” a. 将所有的下属信息 --- 全选 --- 复制 --- 粘贴到 excel 表格中 b. 分别提取“姓名” 和 “邮箱”地址信息,结合notepa ...

  6. Wise Force Deleter 强制删除文件工具

    https://www.xitmi.com/3321.html   Wise Force Deleter v1.49 中文绿色版 强制删除文件工具

  7. Linux云主机(离线)搭建本地yum源

    下载CentOS镜像 http://mirror.nsc.liu.se/centos-store/7.3.1611/isos/x86_64/ 离线yum源的配置 1.上传下载的镜像源iso 2.挂载i ...

  8. 【视频开发】ffmpeg实现dxva2硬件加速

    这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...

  9. 使用 pthread_cancel 引入的死锁问题

    先来说一下 pthread_cancel 基本概念. pthread_cancel 调用并不是强制终止线程,它只提出请求.线程如何处理 cancel 信号则由目标线程自己决定,可以是忽略.可以是立即终 ...

  10. python zip函数(11)

    一.zip函数描述和使用 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,返回的结果可以直接强转为list列表,这样做的好处是节约了不少的 ...