【408数据结构与算法】—冒泡排序(十八)

一、交换排序

交换排序思想:两两比较,如果发生逆序则交换,直到所有的记录都排好为止

【408数据结构与算法】—冒泡排序(十八)_交换排序

常见的交换排序的方法:

  • 冒泡排序O (n^2)
  • 快速排序O(nlog2n)

二、冒泡排序

基本思想:每趟不断将记录两两比较,并按前小后大规则交换

【408数据结构与算法】—冒泡排序(十八)_数据结构_02


【408数据结构与算法】—冒泡排序(十八)_交换排序_03


【408数据结构与算法】—冒泡排序(十八)_交换排序_04


【408数据结构与算法】—冒泡排序(十八)_冒泡排序_05


【408数据结构与算法】—冒泡排序(十八)_算法_06


冒泡排序的优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时部分理顺其他元素

如何提高效率?

一旦某一趟比较时不出现记录交换,说明已经排好序了,就可以结束本算法。

冒泡排序的算法

【408数据结构与算法】—冒泡排序(十八)_交换排序_07

C语言实现

#include <stdio.h>
#include <stdlib.h>
int main()
{
int i ,j ,t;
int a[10];
printf("请输入要排序的数据:");
for( i = 0 ; i < 10 ; i ++ )
{
scanf(" %d " , & a[i]);
}
for( i = 0 ; i < 9 ; i++ )
for( j = 0 ; j < 9 - i ; j++ )
{
if( a[j] > a[j+1] )
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
printf("排序过后的结果为:");
for( i = 0 ; i < 10 ; i++ )
{
printf(" %d " ,a[i]);
}
return 0;
}

三、冒泡算法的改进

【408数据结构与算法】—冒泡排序(十八)_排序算法_08

改进的冒泡排序算法

【408数据结构与算法】—冒泡排序(十八)_交换排序_09

四、时间复杂度分析

【408数据结构与算法】—冒泡排序(十八)_交换排序_10


【408数据结构与算法】—冒泡排序(十八)_数据结构_11

五、冒泡排序的算法评价

【408数据结构与算法】—冒泡排序(十八)_交换排序_12

📢📢总结

【408数据结构与算法】—冒泡排序(十八)_算法_13