数据结构之--冒泡排序算法及改进

Posted willowWind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之--冒泡排序算法及改进相关的知识,希望对你有一定的参考价值。

冒泡排序,是我们学习数据结构第一个排序算法,也是一种最常见和简单的排序算法。

排序原理:

我们把一个数组从左到右依次两两元素比较,比较完成一趟后,能确定最大(最小)值,放在最右边(最左边);

剩下的元素重复上述步骤,直到整个数组有序。

该算法时间复杂度一般为n 。

java实现代码如下:

public class BubbleSort {
    public static void swap(int[] array, int a, int b)
    {
        array[a] = array[a] ^ array[b];
        array[b] = array[b] ^ array[a];
        array[a] = array[a] ^ array[b];
    }
    
    public static void sort1(int[] array, int length)
    {
        for(int i = 0; i < length -1; i++)
        {
            for (int j = 0; j < length - 1 - i; j++)
            {
                if (array[j] > array[j +1])
                    swap(array, j, j+1);
            }
        }
        
        
    }
}

 

该算法有一种改进算法,叫鸡尾酒排序,也叫定向冒泡排序。

我们可以同时遍历出最大和最小的数,并放在两边,后面继续重复上述步骤,某些情况下(比如数据大部分有序),会比第一种时间复杂度低。

JAVA实现如下:

public class BubbleSort {
    public static void swap(int[] array, int a, int b)
    {
        array[a] = array[a] ^ array[b];
        array[b] = array[b] ^ array[a];
        array[a] = array[a] ^ array[b];
    }
    
    
    
    public static void sort2(int[] array, int length)
    {
        int start = 0;
        int end = length -1 ;
        while(start < end)
        {
            for(int i = start; i < end; i++)
            {
                if (array[i] > array[i +1])
                    swap(array, i, i+1);
            }
            end --;for(int j = end; j > start; j--)
            {
                if (array[j] < array[j - 1])
                    swap(array, j, j-1);
            }
            start++;
           
        }
    }
}

 

以上是关于数据结构之--冒泡排序算法及改进的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序算法及改进

数据结构与算法之排序算法:交换排序

挖掘算法中的数据结构:O(n^2)排序算法之 选择插入冒泡希尔排序 及 优化

排序算法之快速排序

排序算法之冒泡排序

快速排序算法详解及代码实现