zoukankan      html  css  js  c++  java
  • 冒泡排序

    基本思想

    冒泡排序的基本概念是依次比较相邻的两个元数,将小的数放在前面,大的数放在后面。

    即在第一趟排序中,首先比较第1个数和第2个数,将小数放前,大树放后;

    然后比较第2个数和第3个数,将小数放前,大数放后。以此类推,如此继续,直到比较最后两个数,将小数放前,大数放后。至此,第一趟排序结束,将最大的数放到了最后!

    第二趟:仍从第一对数开始比较,将小数放前,大数放后,一直比到倒数第2个数(倒数第1个数已经是最大的了),第二趟结束,倒数第2的位置上得到一个新的最大数。

    以此类推,重复以上过程,直至最终完成排序。

    由于排序过程中总是小数往前放,大数往后放,类似于气泡上升,所以成为冒泡排序。

    实现代码

    package com.csdhsm.sort;
    
    /** 
     * @Title: BubbleSort.java
     * @Package: com.csdhsm.sort
     * @Description 冒泡排序 
     * @author Han
     * @date 2016-4-3 上午11:27:50 
     * @version V1.0
     */ 
          
    public class BubbleSort {
        
        public void sort(int[] arr,int len){
            
            for(int i = 0;i<len-1;i++){
                
                for(int j = 1;j<len-i;j++){
                    
                    if(arr[j-1] > arr[j]){
                        
                        int k = arr[j-1];
                        arr[j-1] = arr[j];
                        arr[j] = k;
                    }
                }
            }
        }
    }

    效率分析

    稳定 
    空间复杂度O(1) 
    时间复杂度O(n2
    最差情况:反序,需要交换n*(n-1)/2个元素 
    最好情况:正序,不需要交换元素 O(n)

    若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次交换,且不移动记录;

    反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。

    因此冒泡排序总的时间复杂度为O(n2)。

  • 相关阅读:
    Xcode界面切换动画效果
    Objective—C中的排序及Compare陷阱
    串行口应用
    在windows上搭建C语言开发环境——借助eclipse和MinGW
    Leetcode--Two Sum
    C++语言笔记系列之十六——赋值兼容规则&amp;多继承的二义性
    在Powerdesigner中创建概念数据模型
    数据模型
    数据描述的三个领域
    开启PowerDesigner15工具栏上的被禁用掉的图标
  • 原文地址:https://www.cnblogs.com/a294098789/p/5349498.html
Copyright © 2011-2022 走看看