码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-08-12 22:43:49      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:时间   原理   简单   static   bubble   ++   简单的   end   length   

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

排序原理:

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

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

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

 

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

标签:时间   原理   简单   static   bubble   ++   简单的   end   length   

原文地址:http://www.cnblogs.com/willowWind/p/7351586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!