欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

C语言冒泡排序(升序)

发布时间:2024/8/1 编程问答 20 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言冒泡排序(升序) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

什么是冒泡排序:

冒泡排序就是将一组数据进行排序,首先是从相邻的两个元素比较,大的值放在后面,依次往后操作找出最大值,并放在最后一位。

这里我们举例

                arr[10] = { 9,5,4,3,2,1,0,6,7,,8 };

如第一个元素9依次比较会跑到最后一个位子

在从头开始第二大的元素将跑到倒数第二个位置

让后反复循环,进行排序。


简单的冒泡排序:

#include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,1,0,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;for ( i = 0; i < cz-1 ; i++)//大的比较{for ( j = 0; j < cz - i - 1 ; j++)//小的比较{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }

冒泡排序改进1:

我们发现如果在某一次小的比较后,已经完全成为有序数组,我们就不必再进行下一次大的比较,直接退出循环即可。

#include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,1,0,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;int m = 1;for ( i = 0; i < cz-1 ; i++)//大的比较{m = 1;for ( j = 0; j < cz - i - 1 ; j++)//小的比较{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;m = 0;}}if (m){break;}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }

改进2: 

我们发现在进行第一次大的比较后,

                                             arr[10] = { 5,4,3,2,1,0,6,7,8,9 };

数组的后半部分已经有序,我们可以跳过他们。

逃过方法:记录最后改变位置的坐标,并让j<这个坐标即可

#define _CRT_SECURE_NO_WARNINGS 1 //改为升序 #include<stdio.h> int main() {int arr[10] = { 9,5,4,3,2,0,1,6,7,8 };int cz = sizeof(arr) / sizeof(arr[0]);int tmp = 0;int i = 0, j = 0;int m = 1;int last_change = cz;for ( i = 0; i < cz-1 ; i++)//大的比较{m = 1;for ( j = 0; (j < cz - i - 1) && ( j < last_change) ; j++)//小的比较{if (arr[j] > arr[j + 1]){tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp; m =0; }} last_change = j + 1;if (m){break;}}for (int i = 0; i < cz; i++)printf("%d ", arr[i]);return 0; }

总结

以上是生活随笔为你收集整理的C语言冒泡排序(升序)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。