//C语言示例代码如下
创新互联是专业的二七网站建设公司,二七接单;提供成都网站制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行二七网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
#include stdio.h
#define N 10
//冒泡排序(升序)
void bubble_sort(int a[],int n)
{
int i,j; //j表示趟数,i表示第j趟两两比较的次数
int tmp; //临时变量
for(i=0;in-1;i++)
for(j=0;jn-1-i;j++)
{
if(a[j] a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
//选择排序算法,按从小到大顺序
void select_sort(int *array,int n)
{
int i,j,k;
int tmp;
for(i=0;in-1;i++)
{
k=i; //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素
for(j=i+1;jn;j++)
{
if(array[k] array[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k
k=j;
}
//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
if(k != i)
{
tmp=array[k];
array[k]=array[i];
array[i]=tmp;
}
}
}
int main()
{
int arr[N];
int i;
printf("输入数组元素: ");
for(i=0;iN;i++)
scanf("%d",arr[i]);
bubble_sort(arr,N); //调用冒泡排序函数
printf("输出排序后的数组元素: ");
for(i=0;iN;i++)
printf("%d ",arr[i]);
printf("\n输入数组元素: ");
for(i=0;iN;i++)
scanf("%d",arr[i]);
select_sort(arr,N); //调用选择排序函数
printf("输出排序后的数组元素: ");
for(i=0;iN;i++)
printf("%d ",arr[i]);
printf("\n");
return 0;
}
void sortMaopao(int *arr,int n)
{
int i,j,tmp;
if(n100)
return ;
for(i=0;in-1;i++)
{
for(j=i+1;jn;j++)
{
if(*(arr+i)*(arr+j))
{
tmp=*(arr+i);
*(arr+i)=*(arr+j);
*(arr+j)=tmp;
}
}
}
}
这个函数可以帮你实现由大到小排序,如果由小到大的话只需把if(*(arr+i)*(arr+j))这一句里面的 改成 就行了,输出的话可以在主函数调用之后再打印输出就行。
对于冒泡:
可以这样考虑
外层循环式控制一共有多少个泡需要排序, 这个当然要用循环
内层循环控制把某一个泡放到正确的位置, 这个也要用循环, 因为这个泡要和所有未排序泡比较一遍, 然后才能知道自己应该处的位置
这里有两个点,明白了的话,这道题就明白了
1. 外层循环: 仅仅控制一共有多少个泡需要排序, 比如代码中a[10], 一共是10个元素
2. 内层循环: 仅仅控制把当前最大的泡放到最后, 也就是一次内层循环,仅仅把最大的那个泡放到最后了而已
把1和2综合起来看
当j=0时,把a数组10个元素中最大的泡放到最后
当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置
依次类推..直到第10大的元素,即最小的元素放到正数第一个位置
楼主可以这样测试一下,会更加清晰,把第一个循环去掉, 内层循环改为:
for(i=0; i 10; i++) 相当于仅执行上述j=0的一次内层循环, 这个循环的作用是把最大的元素放到最后
在解释下内层循环为什么是 i10-j 其实这个不难理解
当j=0时, 相当于 for(i=0;i10;i++) 也就是遍历所有元素,把最大的放到最后
当j=1时, 相当于 for(i=0;i9;i++) 这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置, 因为第10个位置已经是最大的了,不用再次比较了.
如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:
也就是可以这么写:
//----------------------------------------
for(i=0;i10;i++) //等价于j=0
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i9;i++) //等价于j=1
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
...//同上,仅仅是把i后面的值递减,直到
for(i=0;i1;i++) //等价于j=9
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
上面这一系列代码,等价于原来的双层嵌套循环
sort(str) 就是用户自定义的冒泡排序函数的函数名,str作为函数参数
#includestdio.h
//冒泡排序函数
void bubbleSort(int data[],int n)
{
if(data==NULL || n1)//容错判断
return;
for(int i=0; in-1; i++)//比较的趟数
for(int j=0; jn-i-1; j++)//每趟比较的次数
{
//大数后移,最终的排序是非递减;要想非递增,判断条件换成
if(data[j]data[j+1])
{
int temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
//打印数组
void printdata(int data[], int n)
{
if(data==NULL || n1)//容错判断
return;
for(int i=0; in; i++)
printf("%d ", data[i]);
printf("\n");
}
int main()
{
int data[7] = {2,4,5,1,8,3,2};
printdata(data, 7);//排序前打印
bubbleSort(data, 7);//排序
printdata(data, 7);//排序后打印
return 0;
}
分享文章:c语言冒泡排序的函数 冒泡排序c语言用函数
URL链接:https://www.cdcxhl.com/article16/dophigg.html
成都网站建设公司_创新互联,为您提供全网营销推广、标签优化、Google、网站设计、电子商务、网站策划
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联