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

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

以下都是针对一个无序数组 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. SSM项目实战 之 Maven

    目录 Maven 简介 Maven是什么 Maven下载安装 Maven使用 Maven规定了一套默认的项目格式 创建第一个Maven项目 Maven仓库 Maven常用命令 Maven作用范围(sc ...

  2. Python常用模块大全

    Python常用模块大全 os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.c ...

  3. mysql实现oracle存储过程默认参数

    我们都知道oracle存储过程支持为参数设置默认值,这样即使存储过程升级,原来的调用也可以不受影响.但是mysql不支持,mariadb也没有支持(截止10.4也是如此).但是这一限制会导致升级麻烦重 ...

  4. 环境变量path的值大于1024的解决办法

    原文传送门:https://blog.csdn.net/jytxj111/article/details/43916421 1.打开Path,点击默认文本(WIN 10),将所有路径备份下来 2.新建 ...

  5. 爬虫中Requests模块

    Requests: 让 HTTP 服务人类 虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “ ...

  6. C++11新特性— auto 和 decltype 区别和联系

    一. auto简介 编程时候常常需要把表达式的值付给变量,需要在声明变量的时候清楚的知道变量是什么类型.然而做到这一点并非那么容易(特别是模板中),有时候根本做不到.为了解决这个问题,C++11新标准 ...

  7. App installation failed (A valid provisioning profile for this executable was not found)

    真机调试build success ,App installation failed (A valid provisioning profile for this executable was not ...

  8. 图像处理软件ImageJ

    ImageJ是一个基于java的公共的图像处理软件,它是由National Institutes of Health开发的.可运行于Microsoft Windows,Mac OS,Mac OS X, ...

  9. 【Python开发】C和Python之间的接口实现

    作者:Jerry Jho 链接:https://www.zhihu.com/question/23003213/answer/56121859 ## 更新:关于ctypes,见拙作 聊聊Python ...

  10. [转] Win10插入U盘后双击无法打开,无法访问,显示设备未就绪;驱动哥帮你解决

    说起U盘,相信大家都不陌生. 这个不起眼的小东西在我们日常生活息息相关,一旦损坏可能就会造成一些不必要的麻烦. 最近驱动哥就收到了一大批用户关于U盘问题的相关咨询,一起来看看到底是什么情况吧! 据其中 ...