冒泡排序

冒泡排序(Bubble Sort) 最为简单的一种排序,通过重复走完数组的所有元素,通过打擂台的方式两个两个比较,直到没有数可以交换的时候结束这个数,再到下个数,直到整个数组排好顺序。因一个个浮出所以叫冒泡排序。双重循环时间 O(n^2)

算法步骤

  1. 比较相邻两个数据如果。第一个比第二个大,就交换两个数
  2. 对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后的数就是最大的数。
  3. 针对所有元素上面的操作,除了最后一个。
  4. 重复1~3步骤,知道顺序完成。

可视化

代码

def bubbleSort(nums):for i in range(len(nums)):for j in range(i+1,len(nums)):if nums[j]<nums[i]:tmp = nums[i]nums[i] = nums[j]nums[j] = tmpreturn numsprint(bubbleSort([2,7,3,1,4,6,3,2,5,8,3]))

选择排序

选择排序(Select Sort) 是直观的排序,通过确定一个 Key 最大或最小值,再从带排序的的数中找出最大或最小的交换到对应位置。再选择次之。双重循环时间复杂度为 O(n^2)

算法步骤

  1. 在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
  2. 第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。
  3. 重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。

可视化

代码

def selectSort(nums):for i in range(len(nums)):minIdx = ifor j in range(i+1,len(nums)):if nums[j]<nums[minIdx]:minIdx = jif minIdx != i:tmp = nums[minIdx]nums[minIdx] = nums[i]nums[i] = tmpreturn numsprint(selectSort([2,7,3,1,4,6,3,2,5,8,3]))

快速排序

快速排序(QuickSort)是排除稳定性因素后最常用的排序。通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

算法步骤

  1. 从数列中挑出一个元素作为基准。
  2. 重新排列数列,把所有的比基准小的放在基准前面,反之放在后面(一样大可任意一边)完成后基准处在分区的中间位置。
  3. 通过递归调用把小于基准元素和大雨基准元素的子序列进行排序。

可视化

代码

def partition(nums, left, right):pivot = nums[left]#初始化一个待比较数据i,j = left, rightwhile(i < j):while(i<j and nums[j]>=pivot): #从后往前查找,直到找到一个比pivot更小的数j-=1nums[i] = nums[j] #将更小的数放入左边while(i<j and nums[i]<=pivot): #从前往后找,直到找到一个比pivot更大的数i+=1nums[j] = nums[i] #将更大的数放入右边#循环结束,i与j相等nums[i] = pivot #待比较数据放入最终位置 return i #返回待比较数据最终位置#快速排序
def quicksort(nums, left, right):if left < right:index = partition(nums, left, right)quicksort(nums, left, index-1)quicksort(nums, index+1, right)arr = [10,3,2,2,0]
quicksort(arr, 0, len(arr)-1)
print(arr)

猜你喜欢:

【Leetcode】几种简单的排序算法相关推荐

  1. C语言、Java学习笔记(三)---几种简单的排序算法

    假期已经过了一半,整个人都变得颓废了许多.今天没有出去玩,就学了几个简单的排序算法,以求安慰自己,好歹也是在假期里学习过了.(瘫- C 这里一次性给出三种排序方法的代码,分别是冒泡排序,选择排序和归并 ...

  2. C#开发技术点说明-四种简单的排序算法,AJAX,Http Module,Http 请求处理流

    我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF.Asp.Net MVC.AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.Net.WinForm.还应该有着牢固的计 ...

  3. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang;import java.util.Arrays;/*** Created by admin on 2017/1/20.*/ p ...

  4. 视觉直观感受 7 种常用的排序算法

    2019独角兽企业重金招聘Python工程师标准>>> 1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较 ...

  5. 7 种常用的排序算法直观感受

    1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序 ...

  6. 视觉直观感受7种常用的排序算法

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  7. 几种常用的排序算法之JavaScript实现

    文章目录 插入排序 二分插入排序 选择排序 选择排序 冒泡排序 快速排序 堆排序 归并排序 桶排序 计数排序 插入排序 <html> <script> /* 1)算法简介插入排 ...

  8. 通过视觉直观感受7种常用的排序算法

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  9. access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法

    排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...

最新文章

  1. 解决样本类别不平衡以及困难样本问题的方法总结
  2. Vue父子组件之间的传值
  3. SpringBoot 2.x 集成 Redis
  4. c语言 函数的参数传递示例_isunordered()函数与C ++中的示例
  5. mysql 参照完整性规则_详解mysql数据库审计特点、实现方案及审计插件部署演示...
  6. 个人所得税如何填写最划算?
  7. android 崩溃原因,Android SurfaceView常见崩溃的原因以及解决办法
  8. python可以给你干什么-Python到底可以做什么?
  9. 苹果Mac强大的采样器音源软件:Native Instruments Kontakt
  10. Ms08067 de 阿青姐姐告诉你为什么要学Python内网开发,不看是你的损失!
  11. 软考知识点笔记之----项目范围说明书
  12. day7-列表和元组
  13. [算法]从Trie树(字典树)谈到后缀树
  14. 路由实验7777777
  15. 计算机专业公务员三不限,公务员:三不限岗位是大坑,这3类专业最受欢迎,选对才是硬道理...
  16. superoj738 诸葛亮
  17. 酒仙网IPO被终止:曾拟募资10亿 红杉与东方富海是股东
  18. pod一直处于ContainerCreating,查看报错信息为挂载错误MountVolume.SetUp failed for volume
  19. 图论学习--6 平面图(思维导图)平面概念 对偶图 平面图嵌入算法
  20. python ipaddress模块使用

热门文章

  1. UNITY 画布的粗浅理解
  2. U3D 如何计算一个UI四个角的绝对坐标
  3. LUA 删除元素的问题
  4. LUA table.sort的问题,数组与表的区别
  5. 查看linux是几位的操作系统
  6. 快速部署-01-docker
  7. 算法之智能搜索(下)
  8. 在RHEL 6.5上安装grid报错libcap.so.1
  9. 网站页面设计基本尺寸
  10. 搭建YUM服务器,配置yum客户端