失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言:用冒泡排序对数组进行升序排序

C语言:用冒泡排序对数组进行升序排序

时间:2021-08-03 05:18:37

相关推荐

C语言:用冒泡排序对数组进行升序排序

冒泡排序:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

例:arr[]={4,6,5,1,2,8,9};

4 6 5 1 2 8 9; 4和6进行比较,6比4大则顺序不变,

4 6 5 1 2 8 9; 6和5进行比较,6>5,6与5交换位置

4 5 6 1 2 8 9; 6继续和1比较,6>1,6与1交换位置,同理依次与2比较,继续与2交换位置;

4 5 1 2 6 8 9; 6在与8进行比较,6<8,位置不变,

4 5 1 2 6 8 9; 8和9比较,8 < 9,8与9交换位置,确定9为最大的数,第一轮排序结束。

4 5 1 2 6 8 9; 4与5比较,4<5,位置不变,5与1比较,交换位置,与2比较,交换位置,在与6比较,位置不变,6在与8比较,位置不变,确定8的位置,第二轮排序结束

4 1 2 5 6 8 9;

.........

同理也可确定每个数的位置,

1 2 4 5 6 8 9。

限制条件:一共要进行7轮排序,即为数组元素个数-1;

每一轮排序确定一个元素位置,则每轮排序次数为元素个数-1-确定位置的元素个数。

代码如下:

#include<stdio.h>void bubble_sort(int arr[],int sz){//确定要进行几轮排序;int i = 0;for(i = 0;i < sz - 1;i++){int flag = 1;//假设要排序的数据已经有序//每一轮冒泡排序int j = 0;for(j = 0;j < sz-1-i ; j++){if(arr[ j ] > arr[ j + 1 ]){int tmp = arr[ j ];arr[ j ] = arr[ j +1 ];arr[ j + 1 ] = tmp;flag = 0; //本轮排序的数据不完全有序}}if(flag == 1){//本轮数据已经有序。break; //跳出整个循环}}}int main(){int arr[]={4,6,5,1,2,8,9};int i = 0;int sz=sizeof(arr) / sizeof(arr[0]);//计算数组元素个数//对arr进行排序,排成升序//arr是数组,我们对数组arr进行传参,实际上传递过去的是数组arr首元素的地址bubble_sort(arr,sz); //冒泡排序函数for(i = 0;i < sz; i++ ){printf("%d ",arr[i]);}}

如果觉得《C语言:用冒泡排序对数组进行升序排序》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。