冒泡排序

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

 

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

posted @ 2012-10-22 20:13  Dann  阅读(1246)  评论(0编辑  收藏  举报