气泡排序需要几遍?

时间:2020-04-04 11:29:14

标签: algorithm bubble-sort

如何检查使用气泡排序对数组元素进行排序的遍数?我已经有了天真的解决方案。

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次传递才能排序,第二个示例只需一次传递。

0 个答案:

没有答案
相关问题