- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我讨厌这样问,但我已经束手无策了。无济于事,因为我正在执行此操作的任务需要 for 循环中包含的 while 循环,而不是嵌套的 for 循环我曾经能够找到的每个例子都被使用过。非常令人沮丧。
下面是代码,其中的注释是我尽我所能理解的,以供自己引用(到目前为止,我还不是一个很好的程序员)。
def selection_sort(arr):
for indexvalue in range (0, len(arr) - 1): #we want to start with the 0th item in the index for selection sort and end at the second-to-last one,
currentmin = indexvalue #establishes the first variable as our lowest looked at so far. This is something that changes every time we go over the array, looking for the next lowest number
while indexvalue<len(arr):
if arr[indexvalue] < arr[currentmin]: #allows us to find the new lowest value—anything lower than our currently-located minimum should count as our new lowest value
arr[indexvalue], arr[currentmin] = arr[currentmin], arr[indexvalue] #exchanges the two values so that our current lowest value is set one to the left in the array, and the new lowest value one to the right
indexvalue = indexvalue+1 #adds another 1 to our counter so that we can compare the next-indexed items
else: #should occur when we reach the end of our array
break #forcibly ends the while loop, and by extension the function
不太确定发生了什么——尽我所能处理的那样它有效,但显然无效。例如,当我运行时:
testlist=[10, 12, 15, 1, 0, 4, 99]
selection_sort(testlist)
print(testlist)
我得到测试列表,没有改变。知道为什么会这样吗?我显然遗漏了一些重要的东西,但我不知道它可能是什么。
编辑:下面新的、改进的代码。不完美,但至少现在可以对某些东西进行排序。这个集合产生了一组数据,这些数据似乎正在用它们的索引位置替换元素;我相当确定它是由第 6 行引起的。但不确定为什么。
def selection_sort(arr):
for indexvalue in range (0, len(arr) - 1): #we want to start with the 0th item in the index for selection sort and end at the second-to-last one,
currentmin = indexvalue #establishes the first variable as our lowest looked at so far. This is something that changes every time we go over the array, looking for the next lowest number
while indexvalue<len(arr):
if arr[indexvalue] > currentmin: #allows us to find the new lowest value—anything lower than our currently-located minimum should count as our new lowest value
arr[indexvalue], currentmin = currentmin, arr[indexvalue] #exchanges the two values so that our current lowest value is set one to the left in the array, and the new lowest value one to the right
indexvalue = indexvalue+1 #adds another 1 to our counter so that we can compare the next-indexed items
print (arr)
else: #should occur when we reach the end of our array
break #forcibly ends the while loop, and by extension the function
最佳答案
在你的 while 循环开始时你总是比较 arr[currentmin]
与自身,因为currentmin == indexvalue
当时。由于值永远不会小于自身,因此 else
在对列表进行任何更改之前,分支接管并结束 while 循环。
这种情况会在 for 循环的每次迭代中发生,从而为您留下一个未更改的列表。
可能的解决方案来了!
或者,你可以选择
if arr[indexvalue] <= arr[currentmin]:
在第 5 行,完全没问题,因为选择排序不一定是稳定的排序算法
或
你添加一行
indexvalue = indexvalue + 1
之前
if arr[indexvalue] < arr[currentmin]:
希望它能有所帮助(而且我没有对所有格式做过度 ^^' )
既然我们已经解决了这个问题,我们应该看看 if 语句中发生了什么:
当找到一个比最小元素还小的元素时,选择排序只记住这个新索引。
currentmin = indexvalue
应该还没有进行交换。
当indexvalue
已到达列表末尾,currentmin
应该指向最小的尚未排序的元素。
这个最小的元素现在应该与第一个未排序的元素交换,该元素应该在arr[indexvalue]
。 .但是既然你用过indexvalue
移动到列表的其余部分,程序不知道未排序元素从哪里开始。您需要定义另一个“运行索引”以在 while 循环中使用,用 indexvalue
初始化。在 while 循环的头部之前。
关于带有 while 循环的 Python 选择排序返回未改变的数组——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44348511/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在编码时,我问了自己这个问题: 这样更快吗: if(false) return true; else return false; 比这个? if(false) return true; return
如何在逻辑条件下进行“返回”? 在这样的情况下这会很有用 checkConfig() || return false; var iNeedThis=doSomething() || return fa
这是我的正则表达式 demo 如问题所述: 如果第一个数字是 1 则返回 1 但如果是 145 则返回 145 但如果是 133 则返回 133 样本数据a: K'8134567 K'81345678
在代码高尔夫问答部分查看谜题和答案时,我遇到了 this solution返回 1 的最长和最晦涩的方法 引用答案, int foo(void) { return! 0; } int bar(
我想在下面返回 JSON。 { "name": "jackie" } postman 给我错误。说明 Unexpected 'n' 这里是 Spring Boot 的新手。 1日龄。有没有正确的方法来
只要“is”返回 True,“==”不应该返回 True 吗? In [101]: np.NAN is np.nan is np.NaN Out[101]: True In [102]: np.NAN
我需要获取所有在 6 号或 7 号房间或根本不在任何房间的学生的详细信息。如果他们在其他房间,简单地说,我不希望有那个记录。 我的架构是: students(roll_no, name,class,.
我有一个表单,我将它发送到 php 以通过 ajax 插入到 mysql 数据库中。一切顺利,php 返回 "true" 值,但在 ajax 中它显示 false 消息。 在这里你可以查看php代码:
我在 Kotlin 中遇到了一个非常奇怪的无法解释的值比较问题,以下代码打印 假 data class Foo ( val a: Byte ) fun main() { val NUM
请注意,这并非特定于 Protractor。问题在于 Angular 2 的内置 Testability service Protractor 碰巧使用。 Protractor 调用 Testabil
在调试窗口中,以下表达式均返回 1。 Application.WorksheetFunction.CountA(Cells(4 + (i - 1) * rows_per_record, 28) & "
我在本地使用 jsonplaceholder ( http://jsonplaceholder.typicode.com/)。我正在通过 extjs rest 代理测试我的 GET 和 POST 调用
这是 Postman 为成功调用我的页面而提供的(修改后的)代码段。 var client = new RestClient("http://sub.example.com/wp-json/wp/v2
这个问题在这里已经有了答案: What to do with mysqli problems? Errors like mysqli_fetch_array(): Argument #1 must
我想我对 C 命令行参数有点生疏。我查看了我的一些旧代码,但无论这个版本是什么,都会出现段错误。 运行方式是 ./foo -n num(其中 num 是用户在命令行中输入的数字) 但不知何故它不起作用
我已经编写了一个类来处理命名管道连接,如果我创建了一个实例,关闭它,然后尝试创建另一个实例,调用 CreateFile() 返回 INVALID_HANDLE_VALUE,并且 GetLastErro
即使 is_writable() 返回 true,我也无法写入文件。当然,该文件存在并且显然是可读的。这是代码: $file = "data"; echo file_get_contents($fil
下面代码中的变量 $response 为 NULL,尽管它应该是 SOAP 请求的值。 (潮汐列表)。当我调用 $client->__getLastResponse() 时,我从 SOAP 服务获得了
我一直在网上的不同论坛上搜索答案,但似乎没有与我的情况相符的... 我正在使用 Windows 7,VS2010。 我有一个使用定时器来调用任务栏刷新功能的应用程序。在该任务栏函数中包含对 LoadI
我是一名优秀的程序员,十分优秀!