关于冒泡排序两个版本哪个时间复杂度更快?

新手上路,请多包涵

版本一:

/*
explain something:
program parts is refer to "https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/4602306?fr=kg_qa#3_1"

*/
#include <stdio.h>
int n;
int Bubblesort(int *al);


int main(){
    printf("input data number:\n");
    scanf("%d",&n);
    int a[n];
    int i;

    printf("input before sort data:\n");
    for(i=0 ;i<n ;i++ )
        scanf("%d",&a[i]);
    Bubblesort(&a);

    printf("program system is over,thank for you using");
    return 0;
}

int Bubblesort(int *al){
    int i,j,z;

        for (i=0 ;i<n-1 ;i++)/* 外循环为排序趟数,n个数进行n-1趟 */
            for (j=0 ;j<=n-1-i ;j++){/* 内循环为每趟比较的次数,第i趟比较n-i次 */
                if(al[j+1]<al[j]){
                    int t;
                    t = al[j],al[j] = al[j+1],al[j+1] = t;
                }
            }

    printf("\n");
    printf("input after sort data:\n");
    for (i=0 ;i<n ;i++)
        printf("%d\n",al[i]);
    printf("\n");

    return 0;

}

版本二:

#include <stdio.h>
int n;
int Bubblesort(int *al);


int main(){
    printf("input data number:\n");
    scanf("%d",&n);
    int a[n];
    int i;

    printf("input before sort data:\n");
    for(i=0 ;i<n ;i++ )
        scanf("%d",&a[i]);
    Bubblesort(&a);

    printf("program system is over,thank for you using");
    return 0;
}

int Bubblesort(int *al){
    int i,j,z;
    for (z=1 ;z<n ;z++)//多次循环
        for (i=1 ;i<n ;i++)//右边的
            for (j=i-1 ;j>=0 ;j--){//左边的
                if(al[i]<al[j]){
                    int t;
                    t=al[i],al[i]=al[j],al[j]=t;
                }
                else
                    continue;
            }

    printf("\n");
    printf("input after sort data:\n");
    for (i=0 ;i<n ;i++)
        printf("%d\n",al[i]);
    printf("\n");

    return 0;

}
阅读 1.6k
1 个回答

第二个不是冒泡,冒泡不关注方向,但一定是相邻的两个数比较交换的。

原理上更像是插入排序,找到的当前数的正确位置,把占位的数往后挤,再填坑。

至于时间复杂度,两个都是O(n2)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题