冒泡排序

冒泡排序,即对相邻的元素进行两两比较,两个元素顺序相反的话,就进行交换;这样每经过一次排序就会将最小的或最大的元素“冒”到顶端,最终完成排序。

  具体步骤:1)比较前后相邻的两个数据,如果前面的数据大于后面对数据,就将这两个数据进行交换;

       2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大一个数据就“沉”到数组的N-1个位置;

       3)N=N-1,如果N不等于0的话,就重复上述1)2)步骤,否则排序完成。

  时间复杂度:若原数组本身就是有序的,仅需N-1次就可以完成排序;如果是倒序的比较次数为N-1+N-2+...+1=N(N-1)/2次,交换次数与比较次数等值。

        冒泡排序的平均时间复杂度为:O(n^2)

  空间复杂度:没有利用新的数组来辅助完成排序,冒泡排序的空间复杂度为O(1)

  图解:

 

下面看一下具体实现的代码:

 

Java实现冒泡排序

    1.第一种方法

 1 public class BubbleSort {
 2   public static void main(String[] args) {
 3     int[] arr={6,3,8,2,9,1};
 4     System.out.println("排序前数组为:");
 5     for(int num:arr){
 6       System.out.print(num+" ");
 7     }
 8     for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
 9       for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
10         if(arr[j]>arr[j+1]){
11           int temp=arr[j];
12           arr[j]=arr[j+1];
13           arr[j+1]=temp;
14         }
15       }
16     } 
17     System.out.println();
18     System.out.println("排序后的数组为:");
19      for(int num:arr){
20        System.out.print(num+" ");
21      } 
22   }
23  }

 

    2.第二种方法

 1 public static void BubbleSort1(int [] a, int n){
 2     int i, j;
 3     for(i=0; i<n; i++){//表示 n 次排序过程。
 4         for(j=1; j<n-i; j++){
 5             if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换
 6                 //交换 a[j-1]和 a[j]
 7                 int temp;
 8                 temp = a[j-1];
 9                 a[j-1] = a[j];
10                 a[j]=temp;
11             }
12        } 
13     } 
14 }    

 

C语言实现冒泡排序

 1 #include <iostream>
 2 void BubbleSort(int *arr,int n){
 3     for(int i=0;i<n;i++){
 4         int flag = 0;
 5         for(int j=0;j<n-1;j++){
 6             if(arr[j]>arr[j+1]){
 7                 int t = arr[j];
 8                 arr[j] = arr[j+1];
 9                 arr[j+1] = t;
10                 flag = 1;
11             }
12         }
13         if(!flag) break;
14     }    
15 }
16 int main() {
17     int arr[8] = {3,2,5,8,4,7,6,9};
18     int n = 8;
19     bubbSort(arr,n);
20     for(int i=0;i<n;i++) {
21         printf("%d ",arr[i]);
22     }
23     return 0;
24 }

 

posted @ 2019-10-12 14:11  MrHH  阅读(183)  评论(0编辑  收藏  举报