
1

C 冒泡排序
source link: https://blog.ixk.me/post/c-bubble-sort
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C 冒泡排序
2018-10-05 • Otstar Lin •
本文最后更新于 268 天前,文中所描述的信息可能已发生改变
冒泡排序,在学到循环和数组的时候肯定会接触到这个最基本的排序算法。为什么这种算法要叫做冒泡排序呢?是因为这个排序算法有点像水泡向上冒。在大学计算机的课程中一定会讲到的排序方法,博主我作为计科的一员也是要学习的,先行偷学 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
轮的比较,然后在每轮中进行逐个比较,若不符合大小排序则进行交换,直到所有数符合大小排序
1#include <stdio.h> 2#define N 10 //要比较的数字的数目 3//冒泡排序控制Demo 4//冒泡排序结果和方式 5//结果,使不按大小排序的数组,通过排序后按大小排列 6//方式,遍历比较 7int main(int argc, char const *argv[]) 8{ 9 int i, j, temp, n; 10 int nums[N]; //要进行排序的数组 11 printf ("请输入10个数字\n") 12 for (i = 0; i < N; i++) //循环输入数字 13 { 14 scanf ("%d", &nums[i]); 15 } 16 17 // 18 //降序排列 19 // 20 //外层循环 21 for (i = 0; i < N - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮 22 { 23 //内层循环 24 for (j = 0; j < N - 1 - i; j++) //遍历一轮,并进行循环 25 { 26 //判断后面一个数是否大于前面一个数,是的话就进行交换 27 if (nums[j] < nums[j + 1]) 28 { 29 temp = nums[j]; 30 nums[j] = nums[j + 1]; 31 nums[j + 1] = temp; 32 } 33 } 34 } 35 36 //输出数组 37 printf ("降序排列:\n"); 38 for (n = 0; n < 10; n++) 39 { 40 printf ("%d\n", nums[n]); 41 } 42 printf ("\n"); 43 44 // 45 //升序排列 46 // 47 //外层循环 48 for (i = 0; i < N - 1; i++) //遍历轮数,数组有多少就遍历 i-1 轮 49 { 50 //内层循环 51 for (j = 0; j < N - 1 - i; j++) //遍历一轮,并进行循环 52 { 53 //判断后面一个数是否大于前面一个数,是的话就进行交换 54 if (nums[j] > nums[j + 1]) //升降序通过这个大于小于号进行控制 55 { 56 temp = nums[j]; 57 nums[j] = nums[j + 1]; 58 nums[j + 1] = temp; 59 } 60 } 61 } 62 63 //输出数组 64 printf ("升序排列:\n"); 65 for (n = 0; n < N; n++) 66 { 67 printf ("%d\n", nums[n]); 68 } 69 70 return 0; 71}
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK