【问题标题】:insertion sort gives out the same array插入排序给出相同的数组
【发布时间】:2021-01-12 00:47:17
【问题描述】:

您好,我正在创建一个小型乐透程序,该程序需要使用插入排序对字典的前 6 个数字进行排序,使用选择排序对最后两个数字进行排序我已经完成了代码并编译了它,但它给了我下面的一组结果,最后一个列表不断重复,而不是对其进行排序并打印它我可以知道为什么以及如何修复它

Player 1 has numbers [17, 21, 0, 3, 25, 22, 4, 10]
Player 2 has numbers [13, 22, 11, 20, 24, 28, 20, 7]
Player 3 has numbers [8, 11, 16, 22, 14, 9, 11, 1]
Player 4 has numbers [8, 23, 28, 30, 6, 19, 12, 24]
Player 5 has numbers [22, 10, 2, 13, 4, 7, 15, 27]
Player 6 has numbers [5, 20, 10, 11, 5, 2, 27, 13]
Player 7 has numbers [25, 9, 22, 5, 14, 8, 25, 20]
Player 8 has numbers [16, 19, 25, 6, 17, 18, 13, 13]
Player 9 has numbers [8, 18, 16, 8, 1, 14, 4, 8]
Sorted array is:
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
[8, 18, 16, 8, 1, 14, 4, 8]
the 8 winning numbers are
[9, 12, 5, 17, 14, 17] [16, 4]
import random

def random_generator():
    randomNumber = random.randint(0,30)
    return randomNumber

def winningNumbers():
    winningPwn = []
    winningSwn = []
    for currentPwn in range(6):
        randomPWN = random_generator()
        winningPwn.append(randomPWN)
    for currentSwn in range(2):
        randomSwn = random_generator()
        winningSwn.append(randomSwn)

    return winningPwn, winningSwn

def printWinningNumber(lotteryNumbers):
    for currentLotteryIndex in range(len(lotteryNumbers)):
        print(lotteryNumbers[currentLotteryIndex],end = " ")
    

def draw():
    winning = winningNumbers()
    print("the 8 winning numbers are")
    printWinningNumber(winning)
def generatePlayers():
    players = {}

    for player_id in range(1, 10):
        player_list = []
        for i in range(8):
            player_list.append(random_generator())
        players[player_id] = player_list

    for player_id in players:
       print("Player {} has numbers {}".format(player_id, players[player_id]))
    insertionsort(players[player_id])
    print ("Sorted array is:") 
    for i in players[player_id]: 
        print (players[player_id])
    return players
def insertionsort(players):
       for i in range(1, len(players)): 
  
        value = players[i] 
  
       
        
        while i >0 :
            if value < players[i]:
                players[i+1] = players[i]
                players[i] = value
                i = i - 1
            else:
                break
                
    
generatePlayers()
draw()

【问题讨论】:

标签: python insertion-sort insertion


【解决方案1】:

似乎您的大部分问题是您的排序功能。我调整了其他一些问题,最终得到了这个:

import random


def random_generator():
    randomNumber = random.randint(0, 30)
    return randomNumber


def winningNumbers():
    winningPwn = []
    winningSwn = []
    for currentPwn in range(6):
        randomPWN = random_generator()
        winningPwn.append(randomPWN)
    for currentSwn in range(2):
        randomSwn = random_generator()
        winningSwn.append(randomSwn)

    return winningPwn, winningSwn


def printWinningNumber(lotteryNumbers):
    for currentLotteryIndex in range(len(lotteryNumbers)):
        print(lotteryNumbers[currentLotteryIndex], end=" ")


def draw():
    winning = winningNumbers()
    print("the 8 winning numbers are")
    printWinningNumber(winning)


def generatePlayers():
    players = {}

    for player_id in range(1, 10):
        player_list = []
        for i in range(8):
            player_list.append(random_generator())
        players[player_id] = player_list

    for player_id in players:
        print("Player {} has numbers {}".format(player_id, players[player_id]))
        insertionsort(players[player_id])
        print("     Sorted array is {}".format(players[player_id]))

    return players


def insertionsort(players):
    for i in range(1, len(players)):
        value = players[i]
        while i > 0:
            if value >= players[i-1]:
                break
            players[i] = players[i-1]
            i -= 1
        players[i] = value


generatePlayers()
draw()

产生这个:

Player 1 has numbers [21, 26, 9, 14, 7, 11, 24, 19]
     Sorted array is [7, 9, 11, 14, 19, 21, 24, 26]
Player 2 has numbers [22, 10, 28, 23, 2, 25, 14, 21]
     Sorted array is [2, 10, 14, 21, 22, 23, 25, 28]
Player 3 has numbers [18, 4, 5, 17, 24, 7, 16, 28]
     Sorted array is [4, 5, 7, 16, 17, 18, 24, 28]
Player 4 has numbers [4, 8, 13, 5, 16, 7, 14, 23]
     Sorted array is [4, 5, 7, 8, 13, 14, 16, 23]
Player 5 has numbers [19, 17, 26, 19, 24, 29, 24, 2]
     Sorted array is [2, 17, 19, 19, 24, 24, 26, 29]
Player 6 has numbers [29, 7, 9, 18, 1, 7, 16, 21]
     Sorted array is [1, 7, 7, 9, 16, 18, 21, 29]
Player 7 has numbers [26, 12, 19, 5, 30, 19, 6, 21]
     Sorted array is [5, 6, 12, 19, 19, 21, 26, 30]
Player 8 has numbers [2, 9, 3, 0, 7, 7, 17, 10]
     Sorted array is [0, 2, 3, 7, 7, 9, 10, 17]
Player 9 has numbers [29, 28, 25, 24, 1, 23, 6, 27]
     Sorted array is [1, 6, 23, 24, 25, 27, 28, 29]
the 8 winning numbers are
[10, 23, 1, 30, 21, 9] [19, 1] 

我注意到的一件事是,数字可以并且确实以单个序列重复。彩票号码不是这样的,对吧?

祝你顺利完成你的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多