冒泡排序
算法描述
输入:一个数组
输出:正序排列数组
过程: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个 。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
伪代码
function shot(int a[]){
for(int i = 0; i < a.length - 1; i++){
for(int j = 0; j < a.length - i - 1; j++){
if(a[j] > a[j + 1]){
a = a[j];
a[j] = a[j + 1];
a[j + 1] = a;
}
}
}
}
特点
最坏情况时间复杂度:O(n^2)
最好情况时间复杂度:O(n)
平均时间复杂度:O(n^2)
辅助空间复杂度:O(1)
稳定性:稳定
有一种写法可以去除辅助空间,将辅助空间去除
function shot(int a[]){
for(int i = 0; i < a.length - 1; i++){
for(int j = 0; j < a.length - i - 1; j++){
if(a[j] > a[j + 1]){
a[j] = a[j] + a[j + 1];
a[j + 1] = a[j] - a[j + 1];
a[j] = a[j] - a[j + 1];
}
}
}
}
实例
public class demo {
public static void main(String[] args){
int[] a = {5,6,10,1,9,6};
Bubble b = new Bubble();
b.shot(a);
}
public static class Bubble{
public void shot(int[] arr){
int a;
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - i - 1; j++){
if(arr[j] > arr[j + 1]){
a = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = a;
}
}
}
}
}
}
//TODO 由于现在工作环境是java所以只有java版本,以后会试其他语言包括函数式