算法术语
稳定
如果a原本在b的前面,而a=b,排序之后a依旧在b的前面
不稳定
如果a原本b的前面,而a=b,排序之后a可能出现在b的后面
内排序
所有的排序操作都在内存中完成
外排序
由于数据量大,因此把数据放入磁盘中,而排序通过磁盘和内存的数据传输才能进行
时间复杂度
一个算法执行所有消耗的时间
空间复杂度
运行完一个程序所需要的内存大小
冒泡排序
简介
冒泡排序是一种简单的排序算法。它重复的走访过要排序的数列,一次比较两个元
素,如果他们的排序错误就把她们交换过来。走访数列的工作是重复的进行直到没
有需要交换的为止。这个算法的名字由来是英文越小的元素会经过交换慢慢的”浮“
到数列前端。
描述
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个。
2.对每一对相邻的元素做相同的操作,从开始第一对到结尾的最后一对。
这样在最后的元素应该是最大的数字
3.针对所有的元素重复以上步骤,处了最后一个。
4.重复步骤1~3,直到排序完成。
代码演示
/**
* 冒泡排序
* @author Mr.qian
*
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {8,1,9,2,7,4,5,3,6};
sort(arr);
}
public static void sort(int[] arr) {
//1.判空
if(arr == null || arr.length <= 1) {
return ;
}
//2.外层的for循环,是轮数。轮数等于=数组的长度-1(因为最后一个元素不需要进行操作)
for(int i = 0; i < arr.length -1; i++) {
//3.内层循环,是两两数据比较和数据交换
for(int j = 0; j < arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
结论
冒泡排序 | |
---|---|
平均时间复杂度 | O(n²) |
最好情况 | O(n) |
最坏情况 | O(n²)) |
空间复杂度 | O(1) |
排序方式 | In-place (内排序) |
稳定性 | Y |