气泡排序程序

时间:2018-11-19 00:12:54

标签: c# arrays sorting bubble-sort

我正在创建一个冒泡排序程序,该程序对数组中的随机整数进行排序。该数组应该能够容纳一百万个排序的整数。当我得到很高的数字(例如250,000)时,程序将坐在那里,并且从不输出任何东西。代码如下:

using System;

namespace SortingProject
{
    class MainClass
    {
        public static void Main(string[] args)
        {

            //create an array to hold integers
            int[] list = new int[50000];

            //call random function to populate integer values
            Random rand = new Random();

            //add integers to array
            for (int i = 0; i < list.Length; i++) {

                list[i] = rand.Next(1,50000);
            }

            //call bubble sort method and input the array
            BubbleSorting(list);

        }

        //bubble sort method and logic

        public static void BubbleSorting(int[] array)
        {

            //initialize time start 
            DateTime start = DateTime.Now;
            DateTime end;

            end = DateTime.Now;


            //initialize element integer
            int element = 0;

            for (int bubble = 0; bubble < array.Length; bubble++)
            {
                //create for loop to perform bubble sort
                for (int sort = 0; sort < array.Length - 1; sort++)
                {

                    if (array[sort] > array[sort + 1])
                    {
                        element = array[sort + 1];

                        array[sort + 1] = array[sort];

                        array[sort] = element;
                    }
                }

            }

            //loop and print array contents
            for (int i = 0; i < array.Length; i++)

                Console.Write(array[i] + " ");


            //calculate time it takes to sort array
            end = DateTime.Now;
            TimeSpan ts = end.Subtract(start);
            Console.WriteLine(" ");
            Console.WriteLine("Duration = {0} ms", ts.TotalMilliseconds);
        }
    }
    }

我通常在程序运行时等待一会儿,但是对于更大的数组,它似乎冻结了。对于为什么的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

测试了代码,它运行正常(测试了250000个值)。正如评论中指出的那样,冒泡排序算法并不是最优化的算法。它的复杂度由下式给出:

for (int bubble = 0; bubble < array.Length; bubble++) 
{
    //create for loop to perform bubble sort
    for (int sort = 0; sort < array.Length - 1; sort++)
    {
       \\do logic
    }
 }

外部for循环将执行N个循环。内部的for循环将执行N个循环。 大O符号的复杂度为N * N,因此我们有O(N ^ 2)。

具有250000个值,将有62,500,000,000次迭代。

请记住,复杂度(如果需要的话,所花费的时间)与值的数量N成正比,排序所需的值越多,Bubble排序所需的时间就越长。