• 排序算法一冒泡排序


    原理
      比较两个相邻的元素,将值大的元素交换至右端。

      这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。

    算法分析

                  冒泡排序算法的性能

    排序类别

    排序方法

    时间复杂度

    空间复杂度

    稳定性

    复杂性

    平均情况

    最坏情况

    最好情况

    交换排序

    冒泡排序

    O(N2)

    O(N2)

    O(N)

    O(1)

    稳定

    简单

    时间复杂度

       1.如果我们的数据正序,只需要走一趟即可完成排序。
         所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;
         所以,冒泡排序最好的时间复杂度为-----O(n)。
       2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。
         每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。
         在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为-----O(n2) 。
      综上所述:冒泡排序总的平均时间复杂度为-----O(n2) 。

    算法稳定性

    冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。

       所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法

     1 public class BubbleSort {
     2     public void sort(){ 
    4
    int[] arr = {12,123,3,1,0,6,4,6};
    8
    //优化代码,如果未交换则代表有序 9 boolean isChange= false; 10 11 if(arr==null || arr.length<2){ 12 return ; 13 } 14 for(int i =0;i<arr.length-1;i++){ 15 isChange=false; 16 for(int j=0;j<arr.length-1-i;j++){ 17 if(arr[j]>arr[j+1]){ 18 swap(arr,j,j+1); 19 isChange=true; 20 } 21 } 22 if(!isChange){ 23 break; 24 } 25 } 32 } 33 34 private void swap(int[] arr,int i, int j) { 35 arr[i]=arr[i] ^ arr[j]; 36 arr[j]=arr[i] ^ arr[j]; 37 arr[i]=arr[i] ^ arr[j]; 38 39 } 40 }
  • 相关阅读:
    python调用c++动态库报错
    Python自动化测试常用库整理
    Linux kswapd0 进程CPU占用过高快速处理方法
    Linux安装jdk8及环境变量配置
    免费的网站安全检查和恶意软件扫描程序
    【Java】对象的创建、初始化和使用
    【Java】数组的创建、遍历和复制
    【Java】Java 语言中流程控制语句(分支语句、循环语句、转移语句)的一些新特性
    【Java】Java 语言中操作符的一些新特性
    【Java】常量与变量(局部变量、成员变量)
  • 原文地址:https://www.cnblogs.com/loveer/p/11264968.html
Copyright © 2020-2023  润新知