杨利霞 发表于 2022-9-5 09:28

关于冒泡排序算法的实验


关于冒泡排序算法的实验

在数据量比较少的应用场景,所有的排序算法的时间差异是比较小的,冒泡排序可能是经常用于处理小数据量的排序算法,冒泡排序的时间复杂度为 O(n2)。

  1.C语言的冒泡排序和选择排序的实例:

#include <stdio.h>

int main(){
    int arr[] = {986,89,56,2,78,8,23,47,36,98,3,876,234};

    int temp, i, j, total;
    int len = (unsigned)sizeof(arr)/sizeof(arr);

    printf("原始数据:\n");

    for(i = 0; i < len; i++){
        printf("%d ", arr);
    }

    printf("\n\n");

    //1.-------------------------------
    printf("1.冒泡排序方法1:\n");

    int arr_1;

    for(i = 0;i < len;i++){
        arr_1 = arr;
    }

    total = 0;

    //1.冒泡排序(注意细节,这里使用 i < len,j < len - 1)
    for(i = 0;i < len; i++){
        for(j = 0; j < len - 1; j++){
            if(arr_1 > arr_1){
                temp = arr_1;
                arr_1 = arr_1;
                arr_1 = temp;
            }
            total++;
        }
    }

    for(i = 0; i < len; i++){
        printf("%d ", arr_1);
    }

    printf("\n循环次数:%d\n", total);

    //2.-------------------------------
    printf("\n\n2.冒泡排序方法2:\n");

    int arr_2;

    for(i = 0;i < len;i++){
        arr_2 = arr;
    }

    total = 0;

    //2.冒泡排序(注意细节,这里使用 i < len - 1,j < len - 1)
    for(i = 0;i < len - 1; i++){
        for(j = 0; j < len - 1; j++){
            if(arr_2 > arr_2){
                temp = arr_2;
                arr_2 = arr_2;
                arr_2 = temp;
            }
            total++;
        }
    }

    for(i = 0; i < len; i++){
        printf("%d ", arr_2);
    }

    printf("\n循环次数:%d\n", total);

    //3.-------------------------------
    printf("\n\n3.冒泡排序方法3:\n");

    int arr_3;

    for(i = 0;i < len;i++){
        arr_3 = arr;
    }

    total = 0;

    //3.冒泡排序(注意细节,这里使用 i < len,j < (len - i - 1))
    for(i = 0;i < len; i++){
        for(j = 0; j < (len - i - 1); j++){
            if(arr_3 > arr_3){
                temp = arr_3;
                arr_3 = arr_3;
                arr_3 = temp;
            }
            total++;
        }
    }

    for(i = 0; i < len; i++){
        printf("%d ", arr_3);
    }

    printf("\n循环次数:%d\n", total);

    //4.-------------------------------
    printf("\n\n4.冒泡排序方法4(得到错误结果):\n");

    int arr_4;

    for(i = 0;i < len;i++){
        arr_4 = arr;
    }

    total = 0;

    //4.冒泡排序(注意细节,这里使用 i < len,j < (len - i))
    for(i = 0;i < len; i++){
        for(j = 0; j < (len - i); j++){
            if(arr_4 > arr_4){
                temp = arr_4;
                arr_4 = arr_4;
                arr_4 = temp;
            }
            total++;
        }
    }

    for(i = 0; i < len; i++){
        printf("%d ", arr_4);
    }

    printf("\n循环次数:%d\n", total);

    //5.-------------------------------
    printf("\n\n5.选择排序:\n");

    int arr2;

    for(i = 0;i < len;i++){
        arr2 = arr;
    }

    total = 0;

    //5.选择排序
    for(i = 0;i < len - 1; i++){
        for(j = i + 1; j < len; j++){
            if(arr2 > arr2){
                temp = arr2;
                arr2 = arr2;
                arr2 = temp;
            }
            total++;
        }
    }

    for(i = 0; i < len; i++){
        printf("%d ", arr2);
    }

    printf("\n循环次数:%d\n", total);
}



2.执行后的效果,自已去比对:




————————————————
版权声明:本文为CSDN博主「冰雪青松」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dai510131/article/details/126688498


页: [1]
查看完整版本: 关于冒泡排序算法的实验