经典排序之冒泡排序

    xiaoxiao2026-03-10  7

    冒泡排序是在学校学习编程的时候学习的第一种排序算法,可谓是最经典的排序算法,它是基于比较的排序算法,实现简单,接下来我们来一起温习下冒泡排序的实现原理和时间复杂度。

         实现原理(升序):

    相邻的两个数据(A,B)进行比较,如果A>B,则swap(A,B);一趟排序下来,最大的那个数据排在了数组的末尾,第二趟也是如此,如此类推,直到所有的数据排序完成。

        Java的代码实现如下:

    for(int i=COUNT-1; i>=0; i--) { for (int j = 0; j < i; j++) { if (data[j] > data[j+1]) { int tmp = data[j+1]; data[j+1] = data[j]; data[j] = tmp; } } }   时间复杂度的计算:

         

    for(int i=COUNT-1; i>=0; i--) { (n次) for (int j = 0; j < i; j++) { (n*(n-i)次) if (data[j] > data[j+1]) { (n*(n-i)次) int tmp = data[j+1]; (n*(n-i)次) data[j+1] = data[j]; (n*(n-i)次) data[j] = tmp; (n*(n-i)次) } } }

       解:Θ(5n*(n-i)+n) = O(n2);  (Θ即:去低阶项,去掉常数项,去掉高阶项的常参得到),所以T(n)= =O(n2);

    例子为从小到大排序,

    原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |

    第一趟排序(外循环)

    第一次两两比较6 > 2交换(内循环)

    交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |

    交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |

     

    第二次两两比较,6 > 4交换

    交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |

    交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |

     

    第三次两两比较,6 > 1交换

    交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |

    交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |

     

    第四次两两比较,6 > 5交换

    交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |

    交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

     

    第五次两两比较,6 < 9不交换

    交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

    交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

     

    第二趟排序(外循环)

    第一次两两比较2 < 4不交换

    交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |

    交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |

     

    第二次两两比较,4 > 1交换

    交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |  交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

     

    第三次两两比较,4 < 5不交换

    交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |  交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

     

    第四次两两比较,5 < 6不交换

    交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |

    交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

     

    第三趟排序(外循环)

    第一次两两比较2 > 1交换

    交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |

    交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

     

    第二次两两比较,2 < 4不交换

    交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |  交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

     

    第三次两两比较,4 < 5不交换

    交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |  交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |

     

    第四趟排序(外循环)无交换

    第五趟排序(外循环)无交换

    排序完毕,输出最终结果1 2 4 5 6 9

    转载请注明原文地址: https://ju.6miu.com/read-1307813.html
    最新回复(0)