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

    冒泡排序:比较表中相邻元素,如果它们是逆序的话,就交换它们的位置。重复多次以后,最大元素就"沉到"了列表的最后一个位置。第二遍操作将第二大的元素沉下去。这样一直做,直到n-1遍以后,该列表就排好序了。

    效率:⊙(n^2)

    伪代码:

    1 BubbleSort(A[0..n-1])
    2 //该算法用冒泡排序对数组A[0..n-1]排序
    3 //输入:一个可排序数组A[0..n-1]
    4 //输出:升序排列的数组A[0..n-1]
    5 for i<- 0 to n-2 do
    6      for j<- 0 to n-2-i do
    7           if(A[j+1]<A[j]
    8                swap A[j] and A[j+1]

    冒泡排序代码实现:

     1 result bubbleSort(int *intArray,int n){
     2     if(intArray==NULL||n<=0){
     3         return fail;
     4     }
     5     int temp;
     6     for(int i=0;i<n-1;i++){//每次确定未排序的最后一位的数字,只要确定n-1次,则n个数都排好了
     7         for(int j=0;j<n-1-i;j++){//从坐标为0开始遍历,直到未排序的最后一位数字的前面一位。
     8             if(intArray[j]>intArray[j+1]){//前面的数字大于后面的数字
     9                 temp=intArray[j];
    10                 intArray[j]=intArray[j+1];
    11                 intArray[j+1]=temp;
    12             }
    13         }
    14     }
    15     return success;
    16 }

    完整代码:(大部分代码与选择排序重复,不同的只是对排序的实现)

    View Code
     1  #include<stdio.h>
     2  #include<malloc.h>
     3  enum result{success,fail};
     4  //构造整型数组,并返回
     5  int* createArray(int n);
     6  //对整型数组的内容冒泡排序
     7  result bubbleSort(int *intArray,int n);
     8  //输出整型数组的内容
     9  void output(int *intArray,int n);
    10  int main(){
    11      int *intArray=NULL;
    12      int count=0;//数组大小
    13      //构造数组
    14      printf("请输入要排序的数字个数:");
    15      scanf("%d",&count);
    16      intArray=createArray(count);
    17      if(intArray==NULL){//数组构造失败
    18          printf("数组构造失败:");
    19          return 0;
    20      }
    21      //排序
    22      result r=bubbleSort(intArray,count);
    23      if(r==fail){
    24          printf("排序失败:");
    25      }else{
    26          printf("排序成功:");
    27          output(intArray,count);
    28      }
    29      return 0;
    30  }
    31  int* createArray(int n){
    32      int *intArray=NULL;
    33      if(n>0){
    34          intArray=(int *)malloc(n*sizeof(int));
    35      }else{
    36          return NULL;
    37      }
    38      if(intArray==NULL){
    39          printf("创建数组空间失败");
    40          return NULL;
    41      }
    42      printf("请输入要排序的数字:");
    43      for(int i=0;i<n;i++){
    44          scanf("%d",intArray+i);
    45      }
    46      return intArray;
    47  }
    48  //冒泡排序关键代码
    49  result bubbleSort(int *intArray,int n){
    50      if(intArray==NULL||n<=0){
    51          return fail;
    52      }
    53      int temp;
    54      for(int i=0;i<n-1;i++){//每次确定未排序的最后一位的数字,只要确定n-1次,则n个数都排好了
    55          for(int j=0;j<n-1-i;j++){//从坐标为0开始遍历,直到未排序的最后一位数字的前面一位。
    56              if(intArray[j]>intArray[j+1]){//前面的数字大于后面的数字
    57                  temp=intArray[j];
    58                  intArray[j]=intArray[j+1];
    59                  intArray[j+1]=temp;
    60              }
    61          }
    62      }
    63      return success;
    64  }
    65  
    66  void output(int *intArray,int n){
    67      if(intArray==NULL||n<=0){
    68          return ;
    69      }
    70      for(int i=0;i<n;i++){
    71          printf("%d ",*(intArray+i));
    72      }
    73      printf("\n");
    74  }

    参考:算法设计与分析基础

  • 相关阅读:
    将截断字符串或二进制数据。语句已终止的解决方法
    201812-1 小明上学 Java
    201809-2 买菜 Java
    201809-1 卖菜 Java
    201803-2 碰撞的小球 Java
    201803-1 跳一跳 Java
    201712-2 游戏 Java
    201712-1 最小差值 Java
    201709-2 公共钥匙盒 Java
    201709-1 打酱油 Java
  • 原文地址:https://www.cnblogs.com/dann/p/2734453.html
Copyright © 2011-2022 走看看