首页 > 解决方案 > 冒泡排序问题 C#

问题描述

我有一个小问题要让我的冒泡排序算法在 C# 中正确运行,但我无法弄清楚我的错误。

例如。随机输入:23,20,17,11,17,18,4,1,16,11 输出 20,17,11,17,18,4,1,16,11,23

public class BubbleSort
{
    public static void Start()
    {
        Console.WriteLine("This is a BubbleSort Program!");
        Console.WriteLine("Pease enter the amount of Numbers to sort:");
        int userNumber = int.Parse(Console.ReadLine());

        int[] randomNumbers = new int[userNumber];                      //Create an array of a random lengh (user decides)
        Random r = new Random();
        for (int i = 0; i < userNumber; i++)
        {
            randomNumbers[i] = r.Next(1, 25);                        //fill array with random numbers between 1 and 25
        }

        for (int i = 0; i < userNumber; i++)
        {
            Console.Write(" " + randomNumbers[i]);                  //write down the Array numbers unsorted
        }
        Console.ReadKey();
        Console.WriteLine("");




        bool getSwapper = true;
        while (getSwapper)                                          //Runs as long as there are numbers to sort
        {
            for (int i = 1; i < randomNumbers.Length; i++)          
            {
                int tempNumber = 0;
                if (randomNumbers[i - 1] > randomNumbers[i])
                {
                    tempNumber = randomNumbers[i - 1];              //safe the bigger number in a temp var
                    randomNumbers[i - 1] = randomNumbers[i];        //overwrites the bigger number with the smaller one
                    randomNumbers[i] = tempNumber;                  //overwrites the smaller with the bigger one
                    getSwapper = true;                              //sets swapper to true
                }
            }
            for (int i = 0; i < randomNumbers.Length; i++)
            {
                Console.Write(" " + randomNumbers[i]);              //lists the sorted numbers of the array
            }
            Console.ReadKey();
        }
    }
}

}

标签: c#.netalgorithmbubble-sort

解决方案


你有两个问题:

  1. 您应该重置getSwapperfalse.
  2. 当它们还没有排序时,你打印randomNumbers 得太早了。

代码:

    bool getSwapper = true;
    while (getSwapper)                                          //Runs as long as there are numbers to sort
    {
        getSwapper = false; // <- reset getSwagger or we'll have an infinite loop;            

        for (int i = 1; i < randomNumbers.Length; i++)          
        {
            int tempNumber = 0;
            if (randomNumbers[i - 1] > randomNumbers[i])
            {
                tempNumber = randomNumbers[i - 1];              //safe the bigger number in a temp var
                randomNumbers[i - 1] = randomNumbers[i];        //overwrites the bigger number with the smaller one
                randomNumbers[i] = tempNumber;                  //overwrites the smaller with the bigger one
                getSwapper = true;                              //sets swapper to true
            }
        }
    }   // <- You should end while here

    // <- It's the right time now (when getSwapper is false) to print the results

    for (int i = 0; i < randomNumbers.Length; i++)
    {
        Console.Write(" " + randomNumbers[i]);              //lists the sorted numbers of the array
    }

    Console.ReadKey();

推荐阅读