算法顾名思义就是一种计算方法,也可以理解为解决问题的方法或步骤。排序算法就是将一些元素按照一定规则排序的计算方法。解决一件事情使用不同的算法所需要时间和占用的资
源可能并不相同,这就牵扯到效率的问题。因此就有了时间复杂度和空间复杂度两个概念。
冒泡排序是排序算法中的经典,他能把无序的东西按一定的规则顺序排列成升序或降序。比
如将一组数杂乱的数从小到大的排列好,它重复地走访过要排序的数列,依次比较两个相邻
的数,然后将大的数排在后面,直到没有相邻元素需要交换,也就是说该元素列已经排序完
成。冒泡排序比较简单,空间复杂度较低,是稳定的。但没有什么东西是完美的算法也一样重复的走坊要排序的元素列必然会使他的时间复杂度变高效率变差。
冒泡排序动图演示:
Java代码实现:
public class BubbleSort implements IArraySort {
@Override
public int[] sort(int[] sourceArray) throws Exception {
// 对 arr 进行拷贝,不改变参数内容
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
for (int i = 1; i < arr.length; i++) {
// 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
boolean flag = true;
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = false;
}
}
if (flag) {
break;
}
}
return arr;
}
}
空间复杂度
空间复杂度可以分为两个方面:
1.程序保存所需要的存储空间,也就是程序的大小。
2.程序在执行过程中所需要消耗的存储空间资源,如程序在执行过程中的中间变量等。
时间复杂度
即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。