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

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

排序原理:

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

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

该算法时间复杂度一般为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++;
           
        }
    }
}

 

posted on 2017-08-12 21:18  willowWind  阅读(358)  评论(0编辑  收藏  举报