排序算法浅析(二)冒泡排序

一、算法思想
冒泡排序属于典型的交换排序。通过一系列的“交换”动作完成,冒泡排序就是因为在交换过程中,类似水冒泡,小(大)的元素经过不断的交换位置,元素的位置由水底慢慢的浮到水的顶端。经过多趟这样的排序,最终使得整个序列有序。
二、算法实现

/*冒泡排序*/
public static void BubbleSort(int[] nums){
    boolean flag = false;
    int temp = 0;
    for(int i = 0; i < nums.length; i++){
         for(int j = 0; j < nums.length - i - 1; j++){
                 if(nums[j] > nums[j + 1]){
                     flag = true;
                     temp = nums[j];
                     nums[j] = nums[j+1];
                     nums[j + 1] = temp;
                 }
             }
             //判断是否有交换,若是没有说明序列已经有序
             if(flag == false){
                 return;
             }
    }
}

三、算法性能分析
(1)时间复杂度分析
由冒泡排序的基本代码可知,最内层的循环中的关键字交换操作为基本操作。
1)最坏情况:待排序序列逆序,此时对于外层循环的每次执行,内层循环的判断条件每次都成立,基本操作次数为n-i。i的取值为1~n-1。因此,总的操作次数为 (n-1+1)(n-1)/2 = n(n-1)/2,由此可知时间复杂度为O(n的平方)。
2)最好情况:待排序序列有序,此时内层循环的条件始终不成立,交换不发生,且内层循环执行n-1次后,算法结束。其时间复杂度为O(n)。
(2)空间复杂度分析
额外辅助空间为一个中间值,因此其空间复杂度为O(1)

posted @ 2020-12-13 22:31  Deadwjlee  阅读(83)  评论(0)    收藏  举报