建立一个虚拟公司的网站,东莞网站设计找谁,通化网站建设,软件工程学科评估排名贵阳这个地方的天气变化好大呀#xff0c;前两天晒大太阳#xff0c;今天就冷的脚抖#xff0c;简直不要太冷#xff0c;但是不管怎么样#xff0c;还是要学习的哟#xff01; 冬天来了#xff0c;春天确实还有一点远#xff01; 好了#xff0c;话不多说#xff0c;…贵阳这个地方的天气变化好大呀前两天晒大太阳今天就冷的脚抖简直不要太冷但是不管怎么样还是要学习的哟 冬天来了春天确实还有一点远 好了话不多说我们来开始今天的学习。今天我们来讲冒泡排序什么是冒泡排序呢
冒泡排序是一种基本的排序算法其思想是通过比较两个相邻元素的大小将较大的元素逐渐交换到数组的最末尾。
1. 从数组的第一个元素开始将其与相邻的元素进行比较。 2. 如果当前元素大于相邻元素则交换它们的位置将较大的元素移动到后面。 3. 继续比较与下一个元素直到达到数组的末尾。 4. 重复以上步骤每次比较的次数减少一次。 5. 重复执行上述步骤直到所有元素都按照从小到大的顺序排序。 那么我们现在来看看整体代码
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.hvoid BubbleSort(int arr[], int sz)
{for (int i 0; i sz-1; i)//趟数{for (int 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;}}}
}int main()
{int arr[] { 5,7,9,4,3,6,8,1};//5 7 9 4 3 6 8 1int sz sizeof(arr) / sizeof(arr[0]);//计算有多少个元素BubbleSort(arr,sz);for (int i 0; i sz; i){printf(%d , arr[i]);}return 0;
}
看看运行效果 那么如果是以 9 1 3 4 5 6 7 8这样排序呢我们是不是也还要进行那么多次的排序我们是不是只用一趟排序之后就是我们希望看见的结果了所以我们来改进一下我们的代码。我们假设flag 1为最终排好的效果如果进行交换了我们就把 flag 0表示此时还不是我们想要的效果还可以定义一个count来看看我们进行了多少次比较。
int count 0;void BubbleSort(int arr[], int sz)
{for (int i 0; i sz; i)//趟数{//int flag 1;for (int j 0; j sz - 1 - i; j)//一趟冒泡排序{count;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[] {9,1,3,4,5,6,7,8, };//5 7 9 4 3 6 8 1int sz sizeof(arr) / sizeof(arr[0]);BubbleSort(arr,sz);for (int i 0; i sz; i){printf(%d , arr[i]);}printf(%d, count);return 0;
}
我们先把flag摒弃掉看看总共比较了多少次 加上flag的判断后看看 可能有一些小伙伴有些疑惑了为什么count放在比较的外面而不放在if的里面不是说比较了才加加吗?其实就是放在这里的每一次进来都是要进行比较的假设你上一次达到了你想要的排序但是下一次进来还是要进行比较呀看看要不要进行交换如果不用交换的话那么flag就不用变成0了那么就可以执行到后面然后跳出循环
好了今天就到此结束咯
Good night!