最近想着怎么也要弄点东西来开个源什么的,顺便也梳理一下工作以来的一些知识点。就从算法开始,最常使用的就是各类排序算法了。
第一节就是排序算法了。
冒泡排序
原理
这是学习java以来最早接触的有名字的算法了。冒泡的精髓在于遍历取出最大或最小的数。
如下面示例代码中是从小到大排序(要从大到小修改if比较条件即可<改为>),具体操作就是比较相邻两个数字,满足条件即进行交换。一路交换下去就能出现最大在右边了,再循环自然大的都在右边了。
时间复杂度
如果n个数进行排序,外层循环进行n-1次循环,内层循环进行次数为n-1+n-2+...+1,即n*(n-1)/2=n2-n/2≈n2,时间复杂度O(n2)。
示例代码
整数排序
public static void sort(int[] data){ int temp = 0; for(int i=data.length-1;i>0;i--){ for(int j=0;j
浮点数排序和整数排序一样
public static void sort(double[] data){ double temp = 0; for(int i=data.length-1;i>0;i--){ for(int j=0;j
推而广之,一切能进行比较的都可以用冒泡排序,下面再来一发String字符串排序
public static void sort(String[] data){ String temp; for(int i=data.length-1;i>0;i--){ for(int j=0;j 0){ temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } }}
测试数据测试
String[] data = {"abc","bbc","bbb","bad","abb","abbc"};
结果如下
abb abbc abc bad bbb bbc
最后来个总结的使用代码,当然基础类型不能用这个来操作
public class BubbleSort { public static> void sort(T[] data){ T temp; for(int i=data.length-1;i>0;i--){ for(int j=0;j 0){ temp = data[j]; data[j] = data[j+1]; data[j+1] = temp; } } } } }
适用环境
冒泡算法相对于桶排序可以说是用时间换取空间的算法,另外还有快速排序法(可看做变种冒泡排序)完全可以用来替代传统的冒泡排序,所以适用性其实不多,可能就用于算法研究吧。