排序算法一冒泡排序

欢迎光临我的博客[http://poetize.cn],前端使用VUE2,聊天室使用VUE3,后台使用Spring Boot

 

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

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

算法分析

              冒泡排序算法的性能

排序类别

排序方法

时间复杂度

空间复杂度

稳定性

复杂性

平均情况

最坏情况

最好情况

交换排序

冒泡排序

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 }
posted @ 2019-07-29 17:01  LittleDonkey  阅读(251)  评论(0编辑  收藏  举报