【发布时间】:2016-02-27 05:52:43
【问题描述】:
我正在尝试创建一个使用冒泡排序对 100 个随机数进行排序的函数。 但是,我想我可能做错了什么。让我先给你看我的代码:
#define MAXVALUE 100
void sortera_nummer(int slumptal[]){
int i,j,temp,k=0;
for(i=0;i<MAXVALUE;i++){
for(j=MAXVALUE-1;j>i;j--){
if(slumptal[j-1]>slumptal[j]){
temp=slumptal[j-1];
slumptal[j-1]=slumptal[j];
slumptal[j]=temp;
k++;
}
}
}
printf("K = %d",k);
}
所有数字都从低到高排序,因此排序有效。但我得到的 K = 一个出乎意料的高数字。 (它在 2300 到 2700 之间无处不在。)
所以现在我想知道 - 正常工作的冒泡排序可以使用 100 个元素运行的最大次数应该是多少?计算公式是什么?
(这是我第一次发帖,如有错误请见谅。) 提前致谢。
【问题讨论】:
-
在最坏的情况下,
n迭代n/2交换冒泡排序,输入顺序为n。 -
我数学不是很好,你能解释一下吗?编辑:我假设 n,在这种情况下,= 100?
-
最坏的情况是您的输入数组完全降序排列。在这种情况下,最后一个元素需要 n-1 次迭代才能冒泡。在该迭代中,下一个最小元素将到达前一个循环的第一次交换中的最后一个位置。它会重复。
-
如果我错了,请纠正我,但是。如果在这种情况下,n = 100。那么 n^2 = 10 000。意思是 2300'ish-2700'ish 毕竟不是那么糟糕的结果,对吗?
-
在每次迭代中,下一个最小的需要比前一个循环少一个交换。数学结果是你的
n^2=10 000应该是n(n-1)/2=4 900。所以大约有一半听起来是对的。另一种检查方法是尝试n=50,这应该会导致 1/4 的交换。
标签: math bubble-sort