如何通过手把手教学深入理解冒泡排序算法?

更新于
2026-10-10 02:45:47
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计679个文字,预计阅读时间需要3分钟。

如何通过手把手教学深入理解冒泡排序算法?

当然可以,请提供需要改写的原文,我将为您进行简化并控制在100字以内。

完整代码:

#include <stdio.h>

bubble_sort(int arr[], int sz)

{

int i = 0;

int j = 0;

for(i = 0; i < sz - 1; i++)

{

for(j = 0; j < sz - 1 - i; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}

}

int main()

{

int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 } ;

int sz = sizeof(arr) / sizeof(arr[0]);

int i = 0;

bubble_sort(arr, sz);

for(i = 0; i < sz; i++)

{

如何通过手把手教学深入理解冒泡排序算法?

printf("%d ", arr[i]);

}

return 0;

}


核心思想

将相邻的两个元素进行比较,如果顺序是错的,就交换两个元素的位置,直到所有元素的顺序都正确。

举例分析

现要求将数组 int arr[ 5 ] = { 3, 1, 5, 9, 2 }排成升序

过程演示:

一次排序

因为3比1大,不满足升序,所以3和1进行位置交换


int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;


一趟排序

一共要排4对元素

数组里面有五个元素,就需要比较四组

令sz为数组中元素的个数

所以在循环中比较的次数就为sz - 1

int sz = sizeof(arr) / sizeof(arr[0]);

for(j = 0; j < sz - 1; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}


这一趟后,我们将最大的9放到了最后面,这也就意味着,每一趟交换都会使得最少一个元素放在了正确的位置

一趟 ——> 一个正确位置

四趟 ——>五个正确位置

(因为当四个位置都正确的时候,剩下的哪一个就也是正确的了)

为了把数组全都摆到正确的位置上,一共要进行sz-1趟(sz为数组中元素的个数)


for(i = 0; i < sz - 1; i++)

{

for(j = 0; j < sz - 1; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}


运行结果:

如果本篇文章对你有帮助的话,麻烦点个赞谢谢

如有错误或改进,欢迎指正

本文共计679个文字,预计阅读时间需要3分钟。

如何通过手把手教学深入理解冒泡排序算法?

当然可以,请提供需要改写的原文,我将为您进行简化并控制在100字以内。

完整代码:

#include <stdio.h>

bubble_sort(int arr[], int sz)

{

int i = 0;

int j = 0;

for(i = 0; i < sz - 1; i++)

{

for(j = 0; j < sz - 1 - i; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}

}

int main()

{

int arr[10] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 } ;

int sz = sizeof(arr) / sizeof(arr[0]);

int i = 0;

bubble_sort(arr, sz);

for(i = 0; i < sz; i++)

{

如何通过手把手教学深入理解冒泡排序算法?

printf("%d ", arr[i]);

}

return 0;

}


核心思想

将相邻的两个元素进行比较,如果顺序是错的,就交换两个元素的位置,直到所有元素的顺序都正确。

举例分析

现要求将数组 int arr[ 5 ] = { 3, 1, 5, 9, 2 }排成升序

过程演示:

一次排序

因为3比1大,不满足升序,所以3和1进行位置交换


int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;


一趟排序

一共要排4对元素

数组里面有五个元素,就需要比较四组

令sz为数组中元素的个数

所以在循环中比较的次数就为sz - 1

int sz = sizeof(arr) / sizeof(arr[0]);

for(j = 0; j < sz - 1; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}


这一趟后,我们将最大的9放到了最后面,这也就意味着,每一趟交换都会使得最少一个元素放在了正确的位置

一趟 ——> 一个正确位置

四趟 ——>五个正确位置

(因为当四个位置都正确的时候,剩下的哪一个就也是正确的了)

为了把数组全都摆到正确的位置上,一共要进行sz-1趟(sz为数组中元素的个数)


for(i = 0; i < sz - 1; i++)

{

for(j = 0; j < sz - 1; j++)

{

if(arr[j] > arr[j + 1])

{

int tmp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = tmp;

}

}

}


运行结果:

如果本篇文章对你有帮助的话,麻烦点个赞谢谢

如有错误或改进,欢迎指正