简单LinuxC程序关于排序问题(冒泡排序与选择排序)
来源:互联网 发布:网络大众理财产品收益 编辑:程序博客网 时间:2024/06/16 13:40
题目:输入不少于两个数(含负数、小数),将它们按由小到大的顺序排列起来
要求:需要排序的数字通过参数传递进来。
例如:输入:./a.out -5 5 -6 5.2 4.1 6.5 -2.4 输出: -6 -5 -2.4 4.1 5 5.2 6.5
以下代码使用的是冒泡排序:
#include <stdio.h>#include <stdlib.h> //atof函数必要的头文件int order (int n, char *argv[]){int i,j;float num[n];float temp;for (i = 0; i < n; i++){ num[i] = atof (argv[i + 1]); //将字符串转换为实型} //冒泡排序for (i = 0; i < n - 1 ; i++){for (j = 0; j < n - 1 - i ; j++){if (num[j] > num[j + 1]) //相邻的元素比较,不符合排序规则的交换位置{temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}}}printf ("从小到大排序为:");for (i = 0; i < n; i++){printf ("%5g",num[i]); //%g表示自动选择合适的表示法输出,不会输出多余的0}printf ("\n");return 0;}int main(int argc, char *argv[]){if(argc < 3){printf ("Usage is %s num1 num2 ...\n",argv[0]);}else{order (argc - 1,argv); //指针数组传参} return 0;}
也可以使用选择排序,以下是源代码:
#include <stdio.h>#include <stdlib.h>int order (int n, char *argv[]){int i,j;float num[n];float temp;int min = 0; //假设认为第一个元素最小for (i = 0; i < n; i++){ num[i] = atof (argv[i + 1]);} //选择排序for (i = 0; i < n - 1 ; i++){for (j = i; j < n - 1 ; j++){if (num[min] > num[j + 1]) //比较出待排序的元素中最小的{min = j + 1;}}temp = num[i]; //将比较得出的最小元素与待排序元素的第一个交换位置num[i] = num[min];num[min] = temp;min = i + 1;}printf ("从小到大排序为:");for (i = 0; i < n; i++){printf ("%5g",num[i]);}printf ("\n");return 0;}int main(int argc, char *argv[]){if(argc < 3){printf ("Usage is %s num1 num2 ...\n",argv[0]);}else{order (argc - 1,argv);} return 0;}
关于排序问题,常用的排序方法有冒泡排序、选择排序和快速排序等。
冒泡排序的原理是比较相邻的元素,以从小到大排序为例,先比较第一个和它相邻的,如果不符合排序规则就交换他们两个,对后面每一对都进行同样操作。这样就把最大的数放到最后。以后每一趟可以少比较一个。直到没有任何一对数字需要比较。
选择排序的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在待排序的元素的第一位,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法,比如从小到大排序时,有时会把大的数排到小的数的前面。
当然最快的效率最高的是快速排序。
阅读全文
1 0
- 简单LinuxC程序关于排序问题(冒泡排序与选择排序)
- 简单选择排序与冒泡排序
- 关于选择排序与冒泡排序
- 冒泡排序,简单选择排序
- 简单选择排序,冒泡排序
- 冒泡排序与选择排序
- 选择排序与冒泡排序
- 选择排序与冒泡排序
- 选择排序与冒泡排序
- 冒泡排序与选择排序
- 冒泡排序与选择排序
- 选择排序与冒泡排序
- 冒泡排序与选择排序
- 冒泡排序与选择排序
- 选择排序与冒泡排序
- 选择排序与冒泡排序
- 选择排序与冒泡排序
- 选择排序与冒泡排序
- 遍历所有Map(json)中的键值对
- Java数组
- JAVA、WEB最新技术框架整理 参考下
- 初识Docker
- 物联网产业链
- 简单LinuxC程序关于排序问题(冒泡排序与选择排序)
- java继承[详细]
- vs2010中的c语言sqrt编译不通过
- 基于Apache2.2配置虚拟域名访问
- Spring学习笔记(二)IOC详解
- 麦瘟病(wheat blast)是什么鬼
- Atom编辑器
- postman学习
- 消息处理之performSelector