您的位置:首页 > 其它

算法入门学习----1.1冒泡排序

2018-01-22 00:24 225 查看

一、冒泡排序的原理

 一个数组a[]有N个元素:
 ①第一次循环(n-1)

    a[0]和a[1]进行比较,如果a[0]大于a[1],两者进行交换,否则不交换。
 a[1]和a[2]进行比较,如果a[1]大于a[2],两者进行交换,否则不交换。

  ......................
 a[n-2]和a[n-1]进行比较,如果a[n-2]大于a[n-1],两者进行交换,否则不交换。

    ②第二次循环(n-2)

    a[0]和a[1]进行比较,如果a[0]大于a[1],两者进行交换,否则不交换。
 a[1]和a[2]进行比较,如果a[1]大于a[2],两者进行交换,否则不交换。

  ......................

 a[n-3]和a[n-2]进行比较,如果a[n-3]大于a[n-2],两者进行交换,否则不交换。

    ③第三次循环(n-3)

    ............

    第n-1次循环(1)

    a[0]和a[1]进行比较,如果a[0]大于a[1],两者进行交换,否则不交换。

二、冒泡排序时间复杂度和空间复杂度

时间复杂度:1+2+3+......(n-1)=n*(n-1)/2    所以时间复杂度为 n^2
空间复杂度:①最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为:0;

        ②最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n);

        ③平均的空间复杂度为:O(1);

三、冒泡排序代码的实现(Java)

public class Maopao {
public static void main(String[] args){
int[] arr=new int[]{1,5,6,89,4,6,12,48,5,23};
maopao(arr);
}
public static void show(int[] arr){  //输出函数
for(int a: arr){
System.out.println(a);
}
}
public static void maopao(int[] arr){
for(int n=arr.length-1;n > 0;n--){   //第一层,表示需要n-1次大循环
for(int m=0;m < n;m++){          //第二层,表示每次大循环需要多少次比较
if(arr[m] > arr[m+1]){
int temp =0;
temp = arr[m];
arr[m] = arr[m+1];
arr[m+1] = temp;
}
}
}
show(arr);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: