如何检查使用气泡排序对数组元素进行排序的遍数?我已经有了天真的解决方案。
int count_the_pass(int *p,int size){
int count;
for(int i = 0;i<size-1;i++){
bool flag = false;
for(int j=0;j<size-i-1;j++){
if(p[j]>p[j+1]){
int temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
flag = true;
}
}
if(flag==false)
return i;
}
}
但是,仅适合数组大小的此方法足够小(小于3000)。
当数组大小很大时,我超过了时间限制。如何计算通过次数以提高效率?
我也试图计算整个数组的求反数。
但是我无法弄清楚反转数和通过次数之间的关系。
示例:
{1,3,4,2}的倒数是{(3,2),(4,2)},它需要两次通过。
{1,4,2,3}的倒数是{(4,2),(4,3)},它需要经过一遍。
两个示例都具有2个反转对,但是第一个需要2次传递才能排序,第二个示例只需一次传递。