【问题标题】:Insertion sort script on powershellpowershell 上的插入排序脚本
【发布时间】:2022-11-17 19:53:19
【问题描述】:

我正在尝试在研究 powershell 的情况下制作插入排序算法。

代码:

$TestArrayList = [System.Collections.ArrayList]@(8, 2, 11, 12, 5, 6, 7)

for ($i = 0; $i -lt $TestArrayList.Count; $i++) {

    $key = $TestArrayList[$i]

    $j = $i-1

    while($j -gt 0 -and $key -lt $TestArrayList[$j]){

        $TestArrayList[$j+1] = $TestArrayList[$j] 
        $TestArrayList[$j] = $key
        $j = $j-1

       #Write-Output $TestArrayList[$i]

    }

    Write-Output $TestArrayList[$i]
}

接下来是代码的输出:

8
2
11
12
12
12
12

能不能帮我分析一下,是什么问题。我试着让它从小到大排序。

预计排序:

2, 5, 6, 7, 8, 11, 12

【问题讨论】:

    标签: algorithm powershell sorting scripting


    【解决方案1】:

    您的代码现在有两个问题:

    • 输出不是最终排序的列表,它是Write-Output 语句的中间输出。
    • 嵌套的while 循环中存在一个差一个错误,它会导致始终忽略第一项。

    要解决第一个问题,只需从循环中删除 Write-Output 语句即可。

    要解决第二个问题,请将 while 条件中的第一个比较更改为 $j -ge 0 而不是 $j -gt 0

    for ($i = 0; $i -lt $TestArrayList.Count; $i++) {
    
        $key = $TestArrayList[$i]
    
        $j = $i - 1
    
        while($j -ge 0 -and $key -lt $TestArrayList[$j]){
    
            $TestArrayList[$j+1] = $TestArrayList[$j] 
            $TestArrayList[$j] = $key
            $j = $j - 1
        }
    }
    
    # the list is now sorted correctly
    $TestArrayList
    

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多