提交 b143235f 编写于 作者: W wizardforcel

2020-07-11 11:59:56

上级 720aaefc
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
在减小键操作中,键的值被减小到较低的值。 在减小键操作中,键的值被减小到较低的值。
以下功能用于减小按键。 以下函数用于减小键。
### 减小键 ### 减小键
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
归并排序函数将数组重复分成两半,直到我们达到对大小为 1 的子数组(即`p == r`)执行归并排序的阶段。 归并排序函数将数组重复分成两半,直到我们达到对大小为 1 的子数组(即`p == r`)执行归并排序的阶段。
之后,合并功能开始起作用,并将排序后的数组合并为更大的数组,直到合并整个数组。 之后,合并函数开始起作用,并将排序后的数组合并为更大的数组,直到合并整个数组。
``` ```
MergeSort(A, p, r): MergeSort(A, p, r):
...@@ -49,7 +49,7 @@ MergeSort(A, p, r): ...@@ -49,7 +49,7 @@ MergeSort(A, p, r):
要对整个数组进行排序,我们需要调用`MergeSort(A, 0, length(A)-1)` 要对整个数组进行排序,我们需要调用`MergeSort(A, 0, length(A)-1)`
如下图所示,归并排序算法将数组递归地分成两半,直到我们得到具有 1 个元素的数组的基本情况。 之后,合并功能将拾取排序后的子数组并将其合并以逐渐对整个数组进行排序。 如下图所示,归并排序算法将数组递归地分成两半,直到我们得到具有 1 个元素的数组的基本情况。 之后,合并函数将拾取排序后的子数组并将其合并以逐渐对整个数组进行排序。
![merge sort algorithm visualization](img/b260d5acdfeb1a0b67e39a34777a1ab5.png "Merge sort in action") ![merge sort algorithm visualization](img/b260d5acdfeb1a0b67e39a34777a1ab5.png "Merge sort in action")
...@@ -85,13 +85,13 @@ Have we reached the end of any of the arrays? ...@@ -85,13 +85,13 @@ Have we reached the end of any of the arrays?
## 编写合并算法代码 ## 编写合并算法代码
我们上面描述的合并步骤和用于归并排序的步骤之间的明显区别是,我们仅对连续的子数组执行合并功能 我们上面描述的合并步骤和用于归并排序的步骤之间的明显区别是,我们仅对连续的子数组执行合并函数
这就是为什么我们只需要数组,第一个位置,第一个子数组的最后一个索引(我们可以计算第二个子数组的第一个索引)和第二个子数组的最后一个索引的原因。 这就是为什么我们只需要数组,第一个位置,第一个子数组的最后一个索引(我们可以计算第二个子数组的第一个索引)和第二个子数组的最后一个索引的原因。
我们的任务是合并两个子数组`A[p..q]``A[q + 1..r]`,以创建排序数组`A[p..r]`。 因此,函数的输入为`A``p``q``r` 我们的任务是合并两个子数组`A[p..q]``A[q + 1..r]`,以创建排序数组`A[p..r]`。 因此,函数的输入为`A``p``q``r`
合并功能的工作方式如下: 合并函数的工作方式如下:
1. 创建子数组`L ← A[p..q]``M←A[q + 1..r]`的副本。 1. 创建子数组`L ← A[p..q]``M←A[q + 1..r]`的副本。
2. 创建三个指针`i``j``k` 2. 创建三个指针`i``j``k`
...@@ -271,7 +271,7 @@ void merge(int arr[], int p, int q, int r) { ...@@ -271,7 +271,7 @@ void merge(int arr[], int p, int q, int r) {
如果`M`的大小大于`L`,则需要此步骤。 如果`M`的大小大于`L`,则需要此步骤。
在合并功能的末尾,对子数组`A[p..r]`进行排序。 在合并函数的末尾,对子数组`A[p..r]`进行排序。
* * * * * *
......
...@@ -157,7 +157,7 @@ void heapify(int arr[], int n, int i) { ...@@ -157,7 +157,7 @@ void heapify(int arr[], int n, int i) {
} }
``` ```
功能适用于基本情况和任何大小的树。 因此,只要子树是最大堆,我们就可以将根元素移动到正确的位置,以保持任何树大小的最大堆状态。 函数适用于基本情况和任何大小的树。 因此,只要子树是最大堆,我们就可以将根元素移动到正确的位置,以保持任何树大小的最大堆状态。
* * * * * *
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
> 原文: [https://www.programiz.com/python-programming/pass-statement](https://www.programiz.com/python-programming/pass-statement) > 原文: [https://www.programiz.com/python-programming/pass-statement](https://www.programiz.com/python-programming/pass-statement)
#### 在本文中,您将学习`pass`语句。 它用作占位符,用于将来实现功能,循环等。 #### 在本文中,您将学习`pass`语句。 它用作占位符,用于将来实现函数,循环等。
## 什么是 Python 中的`pass`语句? ## 什么是 Python 中的`pass`语句?
......
...@@ -193,4 +193,4 @@ Value outside function: 20 ...@@ -193,4 +193,4 @@ Value outside function: 20
基本上,我们可以将函数分为以下两种类型: 基本上,我们可以将函数分为以下两种类型:
1. [内置函数](/python-programming/built-in-function)-Python 内置的函数。 1. [内置函数](/python-programming/built-in-function)-Python 内置的函数。
2. [用户定义的功能](/python-programming/user-defined-function)-用户自己定义的功能。 2. [用户定义的函数](/python-programming/user-defined-function)-用户自己定义的函数。
\ No newline at end of file \ No newline at end of file
...@@ -78,7 +78,7 @@ Hello Kate, Good morning! ...@@ -78,7 +78,7 @@ Hello Kate, Good morning!
Hello Bruce, How do you do? Hello Bruce, How do you do?
``` ```
在此功能中,参数`name`没有默认值,并且在通话期间是必需的(强制性的)。 在此函数中,参数`name`没有默认值,并且在通话期间是必需的(强制性的)。
另一方面,参数`msg`的默认值为`"Good morning!"`。 因此,在通话期间它是可选的。 如果提供了一个值,它将覆盖默认值。 另一方面,参数`msg`的默认值为`"Good morning!"`。 因此,在通话期间它是可选的。 如果提供了一个值,它将覆盖默认值。
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
Python 提供了许多[内置函数](https://www.programiz.com/python-programming/built-in-function),这些函数可以在 Python 提示符下随时使用。 Python 提供了许多[内置函数](https://www.programiz.com/python-programming/built-in-function),这些函数可以在 Python 提示符下随时使用。
`input()``print()`之类的某些功能分别广泛用于标准输入和输出操作。 让我们首先看一下输出部分。 `input()``print()`之类的某些函数分别广泛用于标准输入和输出操作。 让我们首先看一下输出部分。
* * * * * *
......
...@@ -184,4 +184,4 @@ Name is nil or an empty string. Cannot process ...@@ -184,4 +184,4 @@ Name is nil or an empty string. Cannot process
在我们的例子中,第一个条件`let temp = name`解开了一个可选参数,该可选参数返回`true`,第二个条件`temp.count > 0`检查了已解包的字符串是否包含超过 0 个字符,在我们的示例中,结果为`false` 在我们的例子中,第一个条件`let temp = name`解开了一个可选参数,该可选参数返回`true`,第二个条件`temp.count > 0`检查了已解包的字符串是否包含超过 0 个字符,在我们的示例中,结果为`false`
因此,`guard`语句内部的语句执行语句`print("Name is nil or an empty string. Cannot process")`,该语句输出`Name is nil or an empty string. Cannot process`并使用`return`语句终止功能。 因此,`guard`语句内部的语句执行语句`print("Name is nil or an empty string. Cannot process")`,该语句输出`Name is nil or an empty string. Cannot process`并使用`return`语句终止函数。
\ No newline at end of file \ No newline at end of file
...@@ -318,7 +318,7 @@ removed value is bc ...@@ -318,7 +318,7 @@ removed value is bc
["ab", "cd", "de"] ["ab", "cd", "de"]
``` ```
同样,您还可以使用`removeFirst`删除数组的第一个元素,`removeLast`删除数组的最后一个元素和`removeAll`清空数组的功能 同样,您还可以使用`removeFirst`删除数组的第一个元素,`removeLast`删除数组的最后一个元素和`removeAll`清空数组。
* * * * * *
......
...@@ -180,7 +180,7 @@ print(someDictionary) ...@@ -180,7 +180,7 @@ print(someDictionary)
* * * * * *
## 一些有用的内置字典功能&属性 ## 一些有用的内置字典函数&属性
### 1\. `isEmpty` ### 1\. `isEmpty`
......
...@@ -83,7 +83,7 @@ print(result) ...@@ -83,7 +83,7 @@ print(result)
在上面的程序中 在上面的程序中
* 外部函数为`operate()`,返回值类型为`Function(Int,Int) -> Int` * 外部函数为`operate()`,返回值类型为`Function(Int,Int) -> Int`
* 内部(嵌套)功能`add()``subtract()` * 内部(嵌套)函数`add()``subtract()`
嵌套函数`add()``subtract()`在封装函数`operate()`之外正在使用。 这是可能的,因为外部函数返回这些函数之一。 嵌套函数`add()``subtract()`在封装函数`operate()`之外正在使用。 这是可能的,因为外部函数返回这些函数之一。
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
## 为什么需要函数重载? ## 为什么需要函数重载?
想象您正在开发一个射击游戏,玩家可以使用刀,刃和枪来攻击敌人。 针对攻击功能的解决方案可能是将操作定义为以下功能 想象您正在开发一个射击游戏,玩家可以使用刀,刃和枪来攻击敌人。 针对攻击函数的解决方案可能是将操作定义为以下函数
```swift ```swift
func attack() { func attack() {
...@@ -27,7 +27,7 @@ func attack() { ...@@ -27,7 +27,7 @@ func attack() {
} }
``` ```
但是,当您尝试运行上述程序时,由于先前在中声明了`attack()`而在 Swift 中会出现编译时错误。 但是,另一种解决方案可能是为特定功能定义不同的功能名称,例如: 但是,当您尝试运行上述程序时,由于先前在中声明了`attack()`而在 Swift 中会出现编译时错误。 但是,另一种解决方案可能是为特定功能定义不同的函数名称,例如:
```swift ```swift
struct Knife { struct Knife {
...@@ -59,7 +59,7 @@ func attackUsingGun(weapon:Gun) { ...@@ -59,7 +59,7 @@ func attackUsingGun(weapon:Gun) {
用不同的名称创建函数很耗时,并且增加了记住函数名称以调用它的开销。 总而言之,这不是直观的。 用不同的名称创建函数很耗时,并且增加了记住函数名称以调用它的开销。 总而言之,这不是直观的。
如果可以为每种武器使用相同的名称但实现不同的功能来创建不同的功能,那就更好了。 这样,记住一个功能名称就足够了,您不必担心其他武器的功能名称。 如果可以为每种武器使用相同的名称但实现不同的功能来创建不同的函数,那就更好了。 这样,记住一个函数名称就足够了,您不必担心其他武器的函数名称。
* * * * * *
......
...@@ -253,7 +253,7 @@ someClosure: ({ ...@@ -253,7 +253,7 @@ someClosure: ({
``` ```
我们可以使用自动闭包功能将上述程序重写为: 我们可以使用自动闭包函数将上述程序重写为:
* * * * * *
......
...@@ -88,7 +88,7 @@ var students:Students = [] ...@@ -88,7 +88,7 @@ var students:Students = []
让我们再分析一个例子。 假设我们有一个将闭包作为输入参数的方法。 让我们再分析一个例子。 假设我们有一个将闭包作为输入参数的方法。
如果您不了解闭包,请不要担心。 只需将其视为一种特殊的功能即可。 我们已经在文章中详细解释了它: *Swift 闭包* 如果您不了解闭包,请不要担心。 只需将其视为一种特殊的函数即可。 我们已经在文章中详细解释了它: *Swift 闭包*
```swift ```swift
func someMethod(oncomp:(Int)->(String)){ func someMethod(oncomp:(Int)->(String)){
......
...@@ -55,7 +55,7 @@ Hello, World! ...@@ -55,7 +55,7 @@ Hello, World!
123.45 123.45
``` ```
您可以通过直接在打印功能中添加变量或常量名称来打印变量或常量的值。 在上面的程序中`print(helloMsg)`输出变量`helloMsg`的值`Hello, World!` 您可以通过直接在打印函数中添加变量或常量名称来打印变量或常量的值。 在上面的程序中`print(helloMsg)`输出变量`helloMsg`的值`Hello, World!`
您也可以在`print`语句中插入字面值。 在语句`print(123.45)`中,它采用不带双引号的浮点字面值`123.45`并将其打印出来。 您也可以在`print`语句中插入字面值。 在语句`print(123.45)`中,它采用不带双引号的浮点字面值`123.45`并将其打印出来。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册