关键词:
数据结构与算法之排序(冒泡,选择,插入)
为什么学习数据结构与算法:
计算机重要的几门课:
1.数据结构和算法
2.网络
3.操作系统
4.计算组成原理
数据结构与算法:
算法:
衡量算法的标准:
时间复杂度:就是程序代码执行的大概次数
小结:
时间复杂度是用来估计算法运行时间的一个式子(单位)
一般来说,时间复杂度高的算法比复杂度低的算法慢
常见的时间复杂度(按效率排序)
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)< O(n^2logn)< O(n^3)
不常见的时间复杂度(看看就好)
O(n!) O(2^n) O(n^n) ....
如何一眼判断时间复杂度
1.循环减半的过程 --> O(logn) 比如二分查找
2.几次循环就是n的几次方的复杂度
空间复杂度:用来评价算法内存占用大小的一个式子
空间换时间
二分查找: 用到递归法
def binarySearch(lis,low,high,val):
if low < high:
mid = (low+high)//2
if lis[mid] == val:
return mid
elif lis[mid] > val:
binarySearch(lis,low,mid,val)
elif lis[mid] < val:
binarySearch(lis,mid+1,high,val)
else:
return -1
数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为:
Data_Structure=(D,R)
其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。
冒泡排序法
冒泡排序法就是: 首先每两个相邻的数,如果前边的比后边的大,那么交换这两个数,每一次都会把最大的数往后排
# 冒泡排序法
# 生成10个在34内的随机数,然后进行排序
import random
lis = list()
for i in range(10):
a = random.randint(1, 34)
lis.append(a)
# print(lis)
# 时间复杂度 O(n^2)
def BubbleSort(lis):
for i in range(len(lis)):
flag = False # 当接收到已经排过序,就无需再多来几次后面的循环
for j in range(len(lis)-i-1):
if lis[j] > lis[j+1]:
lis[j], lis[j+1] = lis[j+1], lis[j]
flag = True
if not flag:
return
BubbleSort(lis)
print(lis)
选择排序法
选择排序法就是:
- 一趟遍历记录最小的数放到第一个位置
- 再一趟遍历记录剩余列表中最小的 数,继续放置
# 选择排序法
# 就是把最小的数往前排
# 时间复杂度 O(n^2)
def SelectSort(lis):
for i in range(len(lis)):
for j in range(i+1, len(lis)):
if lis[j] < lis[i]:
lis[j], lis[i] = lis[i], lis[j]
SelectSort(lis)
print(lis)
插入排序法
插入排序法就是:
- 列表被分为有序区和无序区两个部分,最初有序区只有一个元素
- 每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空
# 插入排序法
# 时间复杂度 O(n^2)
def insertsort(lis):
# 默认第一个数在有序区,从第二个开始找
for i in range(1, len(lis)):
j = i-1
while j >= 0 and lis[j] > lis[j+1]:
lis[j], lis[j+1] = lis[j+1], lis[j]
j -= 1
insertsort(lis)
print(lis)
# 我觉得插入排序还可以用for循环
# 时间复杂度 O(n^2)
def insertsort1(lis):
for i in range(1,len(lis)):
for j in range(i):
if lis[j]>lis[i]:
lis[i],lis[j]=lis[j],lis[i]
insertsort1(lis)
print(lis)
这些是比较常见的排序
数据结构与算法之基本排序
经典的排序算法有八种,分别为: ?冒泡排序 ?选择排序 ?插入排序 ?归并排序 ?希尔排序 ?快速排序 ?堆排序 ?基数排序 其中冒泡排序、选择排序、插入排序称为三大基本排序。 虽然这三... 查看详情
图解排序算法之3种简单排序(选择,冒泡,直接插入)
...们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调用/*... 查看详情
算法之排序二
...候直接插入,所以更加的直接,在实际应用时更常用。在Python上测试一下也可以知道,冒泡排序比插入排序的时间花费更多。我分别使用两种算法对一个numpy生成的长度为2000随机数组进行排序并计算时间,发现冒泡排序花费了1... 查看详情
结构与算法-----冒泡选择插入排序算法(代码片段)
...是比较小的,随着慢慢向水面浮起会逐渐增大。 冒泡算法的运作规律如下: ①、比较相邻元素。如果第一个比第二个大,就交换他们两个。 ②、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这... 查看详情
《数据结构与算法之美》08——排序冒泡排序插入排序选择排序
一、如何分析一个“排序算法”从三个维度进行评价和分析:1.排序算法的执行效率a.最好情况、最坏情况、平均情况时间复杂度b.时间复杂度的系统、常数、低阶c.比较次数和交换(或移动)次数 2.排序算法的内存消耗... 查看详情
图解排序算法之3种简单排序(选择,冒泡,直接插入)(代码片段)
...们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调用/*... 查看详情
排序之冒泡插入选择(代码片段)
一、衡量一个排序算法1.1、排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数、低阶时间复杂度反应的是数据规模n很大的时候的一个增长趋势,所以它表示的时候会忽略系数、常数、低阶... 查看详情
数据结构与算法4:排序算法,选择/插入/冒泡/希尔/快速/归并
【本文谢绝转载,原文来自http://990487026.blog.51cto.com】650)this.width=650;"src="http://s2.51cto.com/wyfs02/M02/87/4A/wKiom1fas7yQMhCrAAIrgn3eO98044.jpg"title="冒泡.jpg"alt="wKiom1fas7yQMhCrAAIrgn3eO98044.jpg"/>排序算 查看详情
挖掘算法中的数据结构:o(n^2)排序算法之选择插入冒泡希尔排序及优化(代码片段)
一.前言1.语言要求对于算法而言,它其实是与语言无关的,被誉为算法神书的《算法导论》中都是以伪码的形式进行编写。算法更重要的是一种思想,当你想透彻后编代码实现就不是问题了。由于不同的语言含有独特... 查看详情
排序算法之选择插入冒泡快速
三个类: AbstractSortService:packagecn.zhi.sort;publicabstractclassAbstractSortService{publicvoidswap(int[]array,inti,intj){if(i!=j){inttemp=array[i];array[i]=array[j];array[j]=temp;}}publicvoidp 查看详情
图解排序算法之3种简单排序(选择,冒泡,直接插入)(代码片段)
...手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数... 查看详情
排序算法python实现
参考技术A排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中... 查看详情
算法之基本排序(冒泡,选择,插入)
冒泡排序:在一次遍历中将最大值挨个两两交换到最后面,之后开始下一次前(n-i)位数的遍历,依次将最大数交换到最后一位。publicclassBubbleSortpublicint[]bubbleSort(int[]A,intn)//int类型数组,n为数组的长度for(i... 查看详情
图解排序算法之3种简单排序(选择冒泡直接插入)
先定义个交换数组元素的函数,供排序时调用/***交换数组元素*@paramarr*@parama*@paramb*/publicstaticvoidswap(int[]arr,inta,intb){arr[a]=arr[a]+arr[b];arr[b]=arr[a]-arr[b];arr[a]=arr[a]-arr[b];} 简单选择排序(O(n^2)) 简单选择排序是最简单直观的一... 查看详情
算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序
排序的元素实现了Comparable接口,以达到对于通用性. 最基础的排序是冒泡排序,下面是其思路:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对... 查看详情
数据结构与算法——排序算法(代码片段)
1.排序算法的分类排序算法:基本排序,多路归并排序>基本排序:交换排序,选择排序,插入排序,合并排序>>交换排序:冒泡排序,快速排序>>选择排序:选择排序,堆排序>>插入排序:插入排序,Shell排序2.冒... 查看详情
算法之常见的排序算法
我们平时说的“排序”,指的是内部排序,即使用内存资源进行排序的。除了内部排序之外,还有外部排序。本文主要介绍内部排序。 内部排序分为插入排序、选择排序、交换排序、归并排序等。其中,插入排序又分为... 查看详情
常用算法之冒泡选择插入快排(代码片段)
常用简单算法一、冒泡排序冒泡排序的基本思想是,对相邻的元素进行两两比较,假设这连个数字是, a、b 同时排序规则是升序,如果a>b则他们位置进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端... 查看详情