当前位置 : 主页 > 编程语言 > c语言 >

手把手教你掌握冒泡排序思路

来源:互联网 收集:自由互联 发布时间:2023-09-06
完整代码: #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

完整代码:

#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;

}

}

}


运行结果:

手把手教你掌握冒泡排序思路_i++_02

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

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

上一篇:C语言函数大全-- s 开头的函数(1)
下一篇:没有了
网友评论