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

发布于 2022-09-12 22:15:43 字数 1897 浏览 33 评论 0

版本一:

/*
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;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疯了 2022-09-19 22:15:43

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文