冒泡排序,在学到循环和数组的时候肯定会接触到这个最基本的排序算法。为什么这种算法要叫做冒泡排序呢?是因为这个排序算法有点像水泡向上冒。在大学计算机的课程中一定会讲到的排序方法,博主我作为计科的一员也是要学习的,先行偷学 ing (逃
思想与举例
冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第 2 轮比较,就选出次大的数,以此类推。
下面以6 2 5 3
进行举例说明
第一轮排序
- 6 2 5 3(初始)
- 2 6 5 3(2 6 交换)
- 2 5 6 3(5 6 交换)
- 2 5 3 6(3 6 交换)
第二轮排序
- 2 5 3 6(初始)
- 2 5 3 6(2 5 不变)
- 2 3 5 6(3 5 交换)
至此由小到大的排序已经完成。
算法总结与实现
首先创建数组nums[N]
然后进行N-1
轮的比较,然后在每轮中进行逐个比较,若不符合大小排序则进行交换,直到所有数符合大小排序
#include <stdio.h>
#define N 10 //要比较的数字的数目
//冒泡排序控制Demo
//冒泡排序结果和方式
//结果,使不按大小排序的数组,通过排序后按大小排列
//方式,遍历比较
int main(int argc, char const *argv[])
{
int i, j, temp, n;
int nums[N]; //要进行排序的数组
printf ("请输入10个数字\n")
for (i = 0; i < N; i++) //循环输入数字
{
scanf ("%d", &nums[i]);
}
//
//降序排列
//
//外层循环
for (i = 0; i < N - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮
{
//内层循环
for (j = 0; j < N - 1 - i; j++) //遍历一轮,并进行循环
{
//判断后面一个数是否大于前面一个数,是的话就进行交换
if (nums[j] < nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
//输出数组
printf ("降序排列:\n");
for (n = 0; n < 10; n++)
{
printf ("%d\n", nums[n]);
}
printf ("\n");
//
//升序排列
//
//外层循环
for (i = 0; i < N - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮
{
//内层循环
for (j = 0; j < N - 1 - i; j++) //遍历一轮,并进行循环
{
//判断后面一个数是否大于前面一个数,是的话就进行交换
if (nums[j] > nums[j + 1]) //升降序通过这个大于小于号进行控制
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
//输出数组
printf ("升序排列:\n");
for (n = 0; n < N; n++)
{
printf ("%d\n", nums[n]);
}
return 0;
}
#include <stdio.h>
#define N 10 //要比较的数字的数目
//冒泡排序控制Demo
//冒泡排序结果和方式
//结果,使不按大小排序的数组,通过排序后按大小排列
//方式,遍历比较
int main(int argc, char const *argv[])
{
int i, j, temp, n;
int nums[N]; //要进行排序的数组
printf ("请输入10个数字\n")
for (i = 0; i < N; i++) //循环输入数字
{
scanf ("%d", &nums[i]);
}
//
//降序排列
//
//外层循环
for (i = 0; i < N - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮
{
//内层循环
for (j = 0; j < N - 1 - i; j++) //遍历一轮,并进行循环
{
//判断后面一个数是否大于前面一个数,是的话就进行交换
if (nums[j] < nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
//输出数组
printf ("降序排列:\n");
for (n = 0; n < 10; n++)
{
printf ("%d\n", nums[n]);
}
printf ("\n");
//
//升序排列
//
//外层循环
for (i = 0; i < N - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮
{
//内层循环
for (j = 0; j < N - 1 - i; j++) //遍历一轮,并进行循环
{
//判断后面一个数是否大于前面一个数,是的话就进行交换
if (nums[j] > nums[j + 1]) //升降序通过这个大于小于号进行控制
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
//输出数组
printf ("升序排列:\n");
for (n = 0; n < N; n++)
{
printf ("%d\n", nums[n]);
}
return 0;
}
C 冒泡排序
https://blog.ixk.me/post/c-bubble-sort许可协议
BY-NC-SA
本文作者
Otstar Lin
发布于
2018/10/05
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!