我正在创建一个冒泡排序程序,该程序对数组中的随机整数进行排序。该数组应该能够容纳一百万个排序的整数。当我得到很高的数字(例如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);
}
}
}
我通常在程序运行时等待一会儿,但是对于更大的数组,它似乎冻结了。对于为什么的任何帮助将不胜感激。
答案 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排序所需的时间就越长。