数据结构与算法之排序算法(一)

排序算法

在我们的日常编码中,排序是非常常见的一种需求,比如:查询一些订单,将订单按照日期进行排序;再比如查询商品信息,将商品信息按照价格进行排序等等。而我们常见的排序算法按照各自的时间复杂度可分为简单排序算法和高级排序算法两大类,这两种分类下的排序算法分别有以下几种:

简单排序算法高级排序算法
冒泡排序、选择排序、插入排序希尔排序、归并排序、选择排序

后面就一一对以上几种常见排序算法进行简单记录分析。

简单排序算法——冒泡排序

冒泡排序(Bubble Sort): 是计算机科学领域的一种较为简单的排序算法。
冒泡排序的排序原理是需要重复遍历所需要排序的数据元素,依次比较相邻元素大小,然后对数据元素进行位置交换,直到没有所需要交换的数据元素为止。

冒泡排序图解:
i冒泡排序图解
冒泡排序实现:
在进行编码之前,我们先对该排序算法的API进行设计

说明
类名BubbleSort
构造方法BubbleSort() 创建BubbleSort对象
成员方法1、public static void sort(Comparable[] obj) 对数组内元素进行排序
2、private static boolean bigger(Comparable c1, Comparable c2) 判断c1是否大于c2
3、private static void exchange(Comparable[] obj, int i, int j) 交换obj数组中索引i和索引j处元素位置

代码实现:

public class BubbleSort {
    /**
     * 排序方法
     */
    public static void sort(Comparable[] arr){
        for (int i=0; i<arr.length; i++){
            for (int j=i; j<arr.length; j++){
                if (bigger(arr[i],arr[j])){
                    exchange(arr, i, j);
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 判断c1是否大于c2
     */
    private static boolean bigger(Comparable c1, Comparable c2){
        return c1.compareTo(c2) > 0;
    }
    /**
     * 交换obj数组中 索引i 与 索引j 处的元素位置
     */
    private static void exchange(Comparable[] arr, int i, int j){
        Comparable tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

冒泡排序时间复杂度:
最坏情况下,也就是数组结构为 {9,8,7,6,5,4,3,2,1} ,此时元素的比较次数为:

​ (N-1)+(N-2)+(N-3)+……+2+1 = ((N-1)+1)*(N-1)/2 = N^2/2 - N/2;

​ 元素交换次数为:

​ (N-1)+(N-2)+(N-3)+……+2+1 = ((N-1)+1)*(N-1)/2 = N^2/2 - N/2;

​ 总执行次数为:

​ (N^2/2 - N/2) + (N^2/2 - N/2) = N^2 - N;

​ 按照大O推导法则,保留函数中最高阶项可得到冒泡排序的时间复杂度为O(N^2)

以上便是冒泡排序的简单总结及实现。

码字不易 莫要白嫖哟 转载还请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值