冒泡排序

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

 

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

你可能感兴趣的:(冒泡排序)