冒泡排序:比较表中相邻元素,如果它们是逆序的话,就交换它们的位置。重复多次以后,最大元素就"沉到"了列表的最后一个位置。第二遍操作将第二大的元素沉下去。这样一直做,直到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 }
完整代码:(大部分代码与选择排序重复,不同的只是对排序的实现)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
参考:算法设计与分析基础