排序算法一冒牌排序

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

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

算法分析

    冒泡排序算法的性能

排序类别

排序方法

时间复杂度

空间复杂度

稳定性

复杂性

平均情况

最坏情况

最好情况

交换排序

冒泡排序

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 }

猜你喜欢

转载自www.cnblogs.com/loveer/p/11264968.html