【Leetcode】几种简单的排序算法
冒泡排序
冒泡排序(Bubble Sort) 最为简单的一种排序,通过重复走完数组的所有元素,通过打擂台的方式两个两个比较,直到没有数可以交换的时候结束这个数,再到下个数,直到整个数组排好顺序。因一个个浮出所以叫冒泡排序。双重循环时间 O(n^2)
算法步骤
- 比较相邻两个数据如果。第一个比第二个大,就交换两个数
- 对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后的数就是最大的数。
- 针对所有元素上面的操作,除了最后一个。
- 重复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)
算法步骤
- 在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
- 第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。
- 重复以上操作直到第 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)是排除稳定性因素后最常用的排序。通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
算法步骤
- 从数列中挑出一个元素作为基准。
- 重新排列数列,把所有的比基准小的放在基准前面,反之放在后面(一样大可任意一边)完成后基准处在分区的中间位置。
- 通过递归调用把小于基准元素和大雨基准元素的子序列进行排序。
可视化
代码
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】几种简单的排序算法相关推荐
- C语言、Java学习笔记(三)---几种简单的排序算法
假期已经过了一半,整个人都变得颓废了许多.今天没有出去玩,就学了几个简单的排序算法,以求安慰自己,好歹也是在假期里学习过了.(瘫- C 这里一次性给出三种排序方法的代码,分别是冒泡排序,选择排序和归并 ...
- C#开发技术点说明-四种简单的排序算法,AJAX,Http Module,Http 请求处理流
我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF.Asp.Net MVC.AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.Net.WinForm.还应该有着牢固的计 ...
- 几种简单的排序算法(JAVA)
几种排序算法(JAVA) 一.代码 package com.hdwang;import java.util.Arrays;/*** Created by admin on 2017/1/20.*/ p ...
- 视觉直观感受 7 种常用的排序算法
2019独角兽企业重金招聘Python工程师标准>>> 1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较 ...
- 7 种常用的排序算法直观感受
1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序 ...
- 视觉直观感受7种常用的排序算法
1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...
- 几种常用的排序算法之JavaScript实现
文章目录 插入排序 二分插入排序 选择排序 选择排序 冒泡排序 快速排序 堆排序 归并排序 桶排序 计数排序 插入排序 <html> <script> /* 1)算法简介插入排 ...
- 通过视觉直观感受7种常用的排序算法
1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
最新文章
- 解决样本类别不平衡以及困难样本问题的方法总结
- Vue父子组件之间的传值
- SpringBoot 2.x 集成 Redis
- c语言 函数的参数传递示例_isunordered()函数与C ++中的示例
- mysql 参照完整性规则_详解mysql数据库审计特点、实现方案及审计插件部署演示...
- 个人所得税如何填写最划算?
- android 崩溃原因,Android SurfaceView常见崩溃的原因以及解决办法
- python可以给你干什么-Python到底可以做什么?
- 苹果Mac强大的采样器音源软件:Native Instruments Kontakt
- Ms08067 de 阿青姐姐告诉你为什么要学Python内网开发,不看是你的损失!
- 软考知识点笔记之----项目范围说明书
- day7-列表和元组
- [算法]从Trie树(字典树)谈到后缀树
- 路由实验7777777
- 计算机专业公务员三不限,公务员:三不限岗位是大坑,这3类专业最受欢迎,选对才是硬道理...
- superoj738 诸葛亮
- 酒仙网IPO被终止:曾拟募资10亿 红杉与东方富海是股东
- pod一直处于ContainerCreating,查看报错信息为挂载错误MountVolume.SetUp failed for volume
- 图论学习--6 平面图(思维导图)平面概念 对偶图 平面图嵌入算法
- python ipaddress模块使用
热门文章