zoukankan      html  css  js  c++  java
  • 冒泡排序

    博客园的第一篇博客,就先来记录一下最简单的冒泡排序吧。
    冒泡排序是交换排序的一种,下面是冒泡排序的一些特征:

    • 平均时间复杂度:O(n^2)
    • 最坏情况:O(n^2)
    • 最好情况:O(n)
    • 平均空间复杂度,最好最坏平均都为:O(1)
    • 是否稳定:稳定

    冒泡排序的一次循环会将一个最小的元素放到排好序的最终位置上

    话不多说,函数代码如下:

    /**
    * arr 为需要排序的数组名
    * len 为数组长度
    */
    void bubble_sort(int arr[], int len)
    {
        int i, j;
        int flag = 0;	// 标记一趟过后是否有元素交换
        for (i=0; i<len-1; i++) {
            flag = 0;
            for (j=len-1; j>i; j--) {
                if (arr[j-1] > arr[j]) {// 如果前者比后者大,则交换两者
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                    
                    flag = 1;           // 标记有元素交换过了
                }
            }
            if (!flag)	// 若一趟过后元素未交换过,说明已经排好序
                break;
        }
    }
    

    简单的测试代码如下,直接保存代码编译即可:

    #include <stdio.h>
    
    /**
    * arr 为需要排序的数组名
    * len 为数组长度
    */
    void bubble_sort(int arr[], int len)
    {
        int i, j;
        int flag = 0;	// 标记一趟过后是否有元素交换
        for (i=0; i<len-1; i++) {
            flag = 0;
            for (j=len-1; j>i; j--) {
                if (arr[j-1] > arr[j]) {// 如果前者比后者大,则交换两者
                    int temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                    
                    flag = 1;           // 标记有元素交换过了
                }
            }
            if (!flag)	// 若一趟过后元素未交换过,说明已经排好序
                break;
        }
    }
    
    void show(int arr[], int len)
    {
        int i;
        for (i=0; i<len; i++) {
            printf("%4d", arr[i]);
        }
        printf("
    ");
    }
    
    int main()
    {
        int n = 4;
        int arr[] = {7, 10, 11, 9};
        bubble_sort(arr, n);
        show(arr, n);
        return 0;
    }
    
  • 相关阅读:
    linux tcp中time_wait
    linux查看系统信息
    运行程序出错无法找到库文件
    安装keepalived
    python 深拷贝与浅拷贝
    python import eventlet包时提示ImportError: cannot import name eventlet
    [原创] 用两个queue实现stack的功能
    [原创] 用两个stack实现queue的功能
    [原创] 编写函数,实现对链表元素的排序与分类
    python 装饰器
  • 原文地址:https://www.cnblogs.com/qijinzhi/p/bubble_sort.html
Copyright © 2011-2022 走看看