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

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

      具体步骤: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 }
  • 相关阅读:
    差分约束+SPFA+栈
    差分约束问题讲解博客
    最小费用最大流2
    最小费用最大流
    合并油田
    PHP核心技术与最佳实践--笔记
    PHP命令行模式
    vim一些常用的快捷键
    varnish 的一个配置
    redis在我工作中的实际应用
  • 原文地址:https://www.cnblogs.com/HuiH/p/11661258.html
Copyright © 2011-2022 走看看