0
点赞
收藏
分享

微信扫一扫

初识C语言冒泡排序

​冒泡排序是通过一系列的“交换”来完成的

过程

首先第一个元素与第二个元素比较,如果第一个元素比较大,两个交换。此时第一个元素就变成了第二个元素。

9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1-->​8 , 9​ , 7 , 6 , 5 , 4 , 3 , 2 , 1

然后第二个元素与第三个元素比较。。。

8 , ​9 , 7 , 6 , 5 , 4 , 3 , 2 , 1-->8 , ​7 , 9​ , 6 , 5 , 4 , 3 , 2 , 1

以此类推,第一次排序的结果就为:8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 9

此时,并没有得到想要的 小——>大 的顺序排列

但是发现9是最大的数,已经放到了最后。那就可以在接下来的交换循环中不考虑它。

8 , 7 , 6 , 5 , 4 , 3 , 2 , 1                 9

对前面的元素进行比较交换

得出:7 , 6 , 5 , 4 , 3 , 2 , 1 , 8            9

同理,下次比较交换也可以不考虑8

以此类推

就会得出1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9

如果说从第一个元素移动到最后的过程称为一趟,有n个元素

9移动一趟,8,7,6,5,4,3,2各移动一趟,最后剩1,无法比较。

则一共需要(n-1)趟。


9交换了8次,8交换了7次..........

需要交换剩余需要比较交换的元素个数-1.


程序:

#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
int i;
for (i = 0; i < sz-1; i++) //确定趟数
{
int j,temp=0;
for (j = 0; j < sz - 1 - i; j++)//每次交换的次数
if (arr[j]>arr[j+1]) // "<"是倒序排列,">"是正序排列
{
temp = arr[j]; //交换(一个元素与它下一个元素的交换)
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5,4,3,2,1 };//确定一个原始序列
int sz = sizeof(arr) / sizeof(arr[0]);//确定这个序列的元素个数 (9个)
bubble_sort(arr, sz);
return 0;
}
举报

相关推荐

C语言-----冒泡排序

C语言冒泡排序

冒泡排序(c语言)

C语言 冒泡排序

C语言-冒泡排序

C语言:冒泡排序

c语言冒泡排序

0 条评论