今天我想分享c语言中排序的三种基础方法,常用于数组,三种方法分别为:冒泡排序,选择排序和插入排序;
1.首先是冒泡排序,对我来说冒泡排序就是数组每两个相邻元素(成员)之间的相互转换的过程;
(1).定义一个自定义函数arr;
(2).定义一个num的数组,元素个数为6;
(3).定义一个int类型的len,来记录数组元素个数;//sizeof()是读取括号里的字节数量;
如图1:
输入:2,5,7,9,4,2后运行的结果:
如图2:
可以看到结果是升序的,补充一点,如果让图1的第5行代码的>(大于)变<(小于)就是降序了;
2.选择排序,顾名思义,对我来说就是在数组中选择两个元素(成员)进行交换;
(1)如果题目要求升序,就定义一个最小值int mn,(不要让mn去等于数组元素的值,而是让mn去做数组元素的下标);
(2)自定义一个函数arr;
输入:3,5,7,9,3,9后运行的结果:
如图4:
可以看出结果也是升序,第6行的小于换大于就是降序了,不过定义的int mn改成int mx就更好了;
3.插入排序,就是把一个数组分为两排,前排为有序元素,后排为无序元素,通过for循环依次为前排的有序元素添加成员;
(1)定义一个自定义函数arr;
(2) 定义一个int t来记录最开始有序后面的值(无序的);
如图5:
运行后的结果为:
如图6:
总结:每个不同的排序方式有不同的特点,其稳定性是插入排序与冒泡排序比选择排序要好很多的,补充一点,也可以用c标准通用工具库的头文件,可用调用qsort()来自定义int类型的参数指针来排序,在代码上会更快点,如图7的第5行到第9行与第25行:
图7:
只有选择排序无论什么情况都是O(n^2),三者唯一不稳定的是:简单选择排序,冒泡的标志性行为:比较相邻成员, 插入排序:接近有序性能最优。