算法系列之--C++和java的冒泡算法及图解(原)

来源:互联网 发布:win10录歌软件 编辑:程序博客网 时间:2024/06/11 17:37

介绍

    冒泡算法基本上是IT从业人员接触到的第一个算法,其原理就是依次对比相邻元素,大的放在后面,当全部                list遍历之后,该list的最大值就会被置换到list的最后,详细步骤如下:     1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。     2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。     3. 针对所有的元素重复以上的步骤,除了最后一个。     4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

特点

    用于算法入门,实战中效率最差

效率

    平均时间复杂度O(n^2)    最坏时间复杂度O(n^2)    最优时间复杂度O(n)

备注

    原始版本的冒泡算法,即使最优情况下,时间复杂度也是O(n^2),那么如何可以达到O(n)呢?    需要满足以下两个条件:    1、当前序列是完全的有序序列    2、添加一个标志位(didSwap),在第一次遍历时如果发现是有序序列,则停止循环即可。    因此可以看出,这种O(n)的情况其实只是理想状态而已,并不具有实战性。

图解

这里写图片描述

这里写图片描述

源码

C源码

#include <stdio.h>#define SIZE 8void bubble_sort(int a[], int n);void bubble_sort(int a[], int n){    int i, j, temp;    for (j = 0; j < n - 1; j++)        for (i = 0; i < n - 1 - j; i++)        {            if(a[i] > a[i + 1])            {                temp = a[i];                a[i] = a[i + 1];                a[i + 1] = temp;            }        }}int main(){    int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};    int i;    bubble_sort(number, SIZE);    for (i = 0; i < SIZE; i++)    {        printf("%d", number[i]);    }    printf("\n");}

java源码

 private int ARRAY_COUNT = 100000;/** 获取随机数列*/private List<Integer> getSortList() {        List<Integer> sortList = new ArrayList<>(ARRAY_COUNT);        Random ra = new Random();        for (int i = 0;i < ARRAY_COUNT;i++){            sortList.add(ra.nextInt(ARRAY_COUNT*10));        }        return sortList; }/*     * 交换数列元素     */   private void swapByIndex(List<Integer> list, int x, int y) {       int  temp = list.get(x);       list.set(x,list.get(y));       list.set(y,temp);   }/*  * 冒泡算法  */   public void maoPao(List<Integer> list)    {        int temp = 0;        for (int i = list.size() - 1; i > 0; --i)        {            for (int j = 0; j < i; ++j)            {                if (list.get(j) > list.get(j+1))                {                    temp = list.get(j);                    list.set(j,list.get(j + 1));                    list.set(j+1,temp);                }            }        }    }

下一节我们来学习另外一种入门的排序算法—-选择算法
各个算法的java版本性能测试结果请看

阅读全文
0 0
原创粉丝点击