python-3.x 尝试编写解决方案以在不使用sort()的情况下对数组重新排序

r1zhe5dt  于 2022-12-01  发布在  Python
关注(0)|答案(1)|浏览(111)

我觉得我已经接近了,但不太确定为什么我的while循环停止执行,我希望它运行/增加计数器,然后条件为真,然后当它运行到无序的数字时,交换它们,然后减少计数器,然后再次运行while循环直到所有的数字都按顺序排列。s大于它前面的数字,但小于它后面的数字。如果这有意义的话。可能对你们大多数人来说很容易,但我只是第一次接触python。这是我目前为止的代码;

arr = [7, 14, 21, 32, 17, 48, 69, 78, 72]
count = 0

while (count < len(arr) - 1) and (arr[count] < arr[count+1]):
    count += 1
    if (arr[count] > arr[count+1]):
        arr[count], arr[count+1]  = arr[count+1], arr[count]
        count -= 1
    continue

print(count)

print(arr)

在我的代码下面加上一些伪代码使它更清晰。

# list of numbers out of order

arr = [7, 14, 21, 32, 17, 48, 69, 78, 72]

# first position in index

count = 0

# loop to check first if value of index position is less than length of array -1 (9-1 = 8) 
# or if value of index position is less than index position + 1 (next index position)

while (count < len(arr) - 1) and (arr[count] < arr[count+1]):
# if true loop should continue + 1 on the next index
    count += 1
# if the value of number in the current index position is greater than the next number it swaps them.
    if (arr[count] > arr[count+1]):
        arr[count], arr[count+1]  = arr[count+1], arr[count]
        count -= 1
    continue

print(count)
    
        
print(arr)

我已经尝试了各种不同的方法,我想我只是被while循环的实际工作方式所困,我需要在遇到第一个false语句后让循环再次运行。

7hiiyaii

7hiiyaii1#

这将以问题所要求的方式工作:

  • 会找出顺序错误的前两个数字。
  • 只切换这些号码并退出。
arr = [7, 14, 21, 32, 17, 48, 69, 78, 72]

for i, v in enumerate(arr):
    if i == len(arr) -1:
        print('reached the end')
        break
    if v > arr[i+1]:
        print('out of order index', i, 'value:',v)
        # do the switch
        arr[i], arr[i+1] = arr[i+1], v
        break

print(arr)

结果是:

out of order index 3 value: 32
[7, 14, 21, 17, 32, 48, 69, 78, 72]

只要break条件存在,您也可以使用while loop实现相同的效果。

相关问题