这是我的我的程序
static void Main(string[] args)
{
int[] arrayToSort = new int[] { 5,4,9};
BubbleSort bubbleSort = new BubbleSort();
int [] SortedArray = bubbleSort.SortArray(arrayToSort);
foreach (int i in SortedArray)
Console.Write(i.ToString() + "," );
Console.WriteLine("Number of Iterations {0}",
bubbleSort.IterationsCounter);
Console.ReadLine();
}
public class BubbleSort
{
public int IterationsCounter;
public int[] SortArray(int[] arrayToSort)
{
for(int i = 0;i<arrayToSort.Length-1;i++)
{
if(arrayToSort[i]>arrayToSort[i+1])
{
int temp=arrayToSort[i];
arrayToSort[i]=arrayToSort[i+1];
arrayToSort[i+1]=temp;
//IterationsCounter++; Update:Moved this line out of if condition)
SortArray(arrayToSort);
}
IterationsCounter++; //Moved counter here:
}
return arrayToSort;
}
输出:
4,5,9 Number of Iterations:1
这怎么可能是对的?我的意思是数组已排序,但肯定有不止一次迭代。我原以为这会有 O(N^2) 的运行时间,但这里有些不对劲。我不是在计算迭代吗?
编辑:
好的,我意识到 3 项是不够的,并且根据建议我将计数器移出if , , 如果现在我将输入更改为
5,4,9,2,3,1,17
迭代次数变为78
。那更好(从某种意义上说它应该很高)但它还不够高。那么这意味着算法有 O(logn) 时间吗?我认为bubblesort是O(n ^ 2)?
谢谢