- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python实现七个基本算法的实例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1.顺序查找 。
当数据存储在诸如列表的集合中时,我们说这些数据具有线性或顺序关系。 每个数据元素都存储在相对于其他数据元素的位置。 由于这些索引值是有序的,我们可以按顺序访问它们。 这个过程产实现的搜索即为顺序查找.
顺序查找原理剖析:从列表中的第一个元素开始,我们按照基本的顺序排序,简单地从一个元素移动到另一个元素,直到找到我们正在寻找的元素或遍历完整个列表。如果我们遍历完整个列表,则说明正在搜索的元素不存在.
代码实现:该函数需要一个列表和我们正在寻找的元素作为参数,并返回一个是否存在的布尔值。found 布尔变量初始化为 False,如果我们发现列表中的元素,则赋值为 True.
1
2
3
4
5
6
7
8
9
10
|
def
search(alist,item):
find
=
False
cur
=
0
while
cur <
len
(alist):
if
alist[cur]
=
=
item:
find
=
True
break
else
:
cur
+
=
1
return
find
|
2.二分查找 。
有序列表对于我们的实现搜索是很有用的。在顺序查找中,当我们与第一个元素进行比较时,如果第一个元素不是我们要查找的,则最多还有 n-1 个元素需要进行比较.
二分查找则是从中间元素开始,而不是按顺序查找列表。 如果该元素是我们正在寻找的元素,我们就完成了查找。 如果它不是,我们可以使用列表的有序性质来消除剩余元素的一半.
如果我们正在查找的元素大于中间元素,就可以消除中间元素以及比中间元素小的一半元素。如果该元素在列表中,肯定在大的那半部分。然后我们可以用大的半部分重复该过程,继续从中间元素开始,将其与我们正在寻找的内容进行比较.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def
search(alist,item):
left
=
0
right
=
len
(alist)
-
1
find
=
False
while
left <
=
right:
mid_index
=
(left
+
right)
/
/
2
if
item
=
=
alist[mid_index]:
find
=
True
break
else
:
if
item > alist[mid_index]:
left
=
mid_index
+
1
else
:
right
=
mid_index
-
1
return
find
|
3.冒泡排序 。
原理:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较.
1
2
3
4
5
6
|
def
sort(alist):
length
=
len
(alist)
for
i
in
range
(
0
,length
-
1
):
for
j
in
range
(
0
,length
-
1
-
i):
if
alist[i] > alist[i
+
1
]:
alist[i],alist[i
+
1
]
=
alist[i
+
1
],alist[i]
|
4.选择排序 。
工作原理:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法.
1
2
3
4
5
6
7
8
|
def
sort(alist):
length
=
len
(alist)
for
j
in
range
(length
-
1
,
0
,
-
1
):
max_index
=
0
for
i
in
range
(
1
,j
+
1
):
if
alist[max_index] < alist[i]:
max_index
=
i
alist[max_index],alist[j]
=
alist[j],alist[max_index]
|
5.插入排序 。
原理:
基本思想是,每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。关键码是数据元素中某个数据项的值,用它可以标示一个数据元素.
1
2
3
4
5
6
7
8
9
10
|
def
sort(alist):
length
=
len
(alist)
for
j
in
range
(
1
,length):
i
=
j
while
i >
0
:
if
alist[i] < alist[i
-
1
]:
alist[i],alist[i
-
1
]
=
alist[i
-
1
],alist[i]
i
-
=
1
else
:
break
|
希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法.
该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高.
1
2
3
4
5
6
7
8
9
10
11
12
|
def
sort(alist):
gap
=
len
(alist)
/
/
2
while
gap >
=
1
:
for
j
in
range
(gap,
len
(alist)):
i
=
j
while
i >
0
:
if
alist[i] < alist[i
-
gap]:
alist[i],alist[i
-
gap]
=
alist[i
-
gap],alist[i]
i
-
=
gap
else
:
break
gap
=
gap
/
/
2
|
6.快速排序 。
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def
sort(alist,start,end):
low
=
start
high
=
end
if
low >
=
high:
return
mid
=
alist[low]
while
low < high:
while
low < high:
if
alist[high] >
=
mid:
high
-
=
1
else
:
alist[low]
=
alist[high]
break
while
low < high:
if
alist[low] < mid:
low
+
=
1
else
:
alist[high]
=
alist[low]
break
alist[low]
=
mid
sort(alist,start,low
-
1
)
sort(alist,high
+
1
,end)
|
7.归并排序 。
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
def
merge_sort(alist):
n
=
len
(alist)
#结束递归的条件
if
n <
=
1
:
return
alist
#中间索引
mid
=
n
/
/
2
left_li
=
merge_sort(alist[:mid])
right_li
=
merge_sort(alist[mid:])
#指向左右表中第一个元素的指针
left_pointer,right_pointer
=
0
,
0
#合并数据对应的列表:该表中存储的为排序后的数据
result
=
[]
while
left_pointer <
len
(left_li)
and
right_pointer <
len
(right_li):
#比较最小集合中的元素,将最小元素添加到result列表中
if
left_li[left_pointer] < right_li[right_pointer]:
result.append(left_li[left_pointer])
left_pointer
+
=
1
else
:
result.append(right_li[right_pointer])
right_pointer
+
=
1
#当左右表的某一个表的指针偏移到末尾的时候,比较大小结束,将另一张表中的数据(有序)添加到result中
result
+
=
left_li[left_pointer:]
result
+
=
right_li[right_pointer:]
return
result
alist
=
[
3
,
8
,
5
,
7
,
6
]
print
(merge_sort(alist))
|
8.各个算法的时间复杂度 。
到此这篇关于Python实现七个基本算法的实例代码的文章就介绍到这了,更多相关Python基本算法内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/xxpythonxx/archive/2020/10/07/13778790.html 。
最后此篇关于Python实现七个基本算法的实例代码的文章就讲到这里了,如果你想了解更多关于Python实现七个基本算法的实例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!