考研要求掌握的C语言(冒泡排序专题)
冒泡排序是啥类型的排序
交换型
冒泡排序的口头表达是啥
当从前往后遍历比较时,待确定的数据依次下沉。
图示
当从后往前遍历比较时,待确定的数依次上浮。
图示:
代码
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>void swap(int &a,int &b)
{int tmp=a;a=b;b=tmp;
}void rangnums(int nums[],int len)
{srand(time(NULL));//初始化数组printf("初始化数组:");for(int i=0;i<len;i++){nums[i]=rand()%100+1;printf("%d ",nums[i]);}puts("");
}void print(int a[],int len)
{for(int i=0;i<len;i++){printf("%d ",a[i]);}puts("");
}//从前往后遍历比较
void buble_sort(int a[],int len)
{for(int i=0;i<len;i++){for(int j=0;j<len-i-1;j++)//防止数组越界例如当i=0时,若不减去1,j范围为【0,9】,但是a[9+1]不存在//所以减去1{printf("j=%d ",j);if(a[j]>a[j+1]){swap(a[j],a[j+1]);}}//puts("");print(a,len);}
}//从后往前遍历比较
void buble_sort_up(int nums[],int len)
{for(int i=0;i<len;++i){for(int j=len-1;j>i;--j)// >0 是为了防止数组越界,例如当j=0时,nums[0-1]不存在{printf("j=%d ",j);if(nums[j-1]>nums[j]){swap(nums[j-1],nums[j]);}}print(nums,len);}}
int main()
{int a[10]={92 ,79 ,49, 59, 86 ,38, 94, 64, 92, 3};// int a[]={81, 1 ,99 ,62 ,28 ,70 ,60, 9, 85 ,88};// int a[]={24 ,20 ,74 ,11 ,25 ,2 ,49 ,45 ,31 ,68 };// rangnums(a,10);// buble_sort(a,10);buble_sort_up(a,10);print(a,10);}
代码每一趟解析图片
数据int a[10]={92 ,79 ,49, 59, 86 ,38, 94, 64, 92, 3};
从前往后遍历比较
从后往前
若还不理解,可以自己动手画一下图