003 冒泡排序法的详细实现过程——“C”
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、冒泡排序法是什么
- 二、实现过程
- 1.图解——一次的冒泡排序
一、冒泡排序法是什么?
冒泡排序是一种交换排列,基本思想是比较前后的关键字,如果反序则交换,直到有序为之
二、实现过程
1.过程分析
代码如下(示例):
void Bubble_sort(int arr[], int sz)
{
int i = 0;
int j = 0;
int temp;
for (i = 0; i < sz - 1; i++) //i<sz-1 ->从小到大排列,每进行一次冒泡排序法就会先把最大值排到最后,i表示一共进行多少次冒泡排序法
{
for (j = 0; j < sz - 1 - i; j++) //一次冒泡排序法的交换次数
{
if (arr[j + 1] < arr[j]) //比较前后元素的大小,反序则交换,有序不变
{
temp = arr[j]; //利用赋值达到从小到大排列的效果
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return 0;
}
int main()
{
int i = 0;
int arr[7] = { 5,4,6,3,7,1,2 };
int sz; //定义数组的大小
sz = sizeof(arr) / sizeof(arr[0]); //计算数组的大小
Bubble_sort(arr, sz); //自定义一个冒泡排序函数
for (i = 0; i< 7; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
实现一次冒泡排序的过程是什么呢?
事不宜迟,上图
此时7被固定
-------------------------------------------------------------------------------------------------------------------------
每一次的冒泡排序过程都会将一个最大的元素固定在末尾
所以一共要进行几次冒泡排序才能将数组中的元素从小到大排列呢
——>即i=sz-1 由于最后每次的冒泡排序将最大的元素放在末尾,最后一次排序时剩余一个最小的数,此时程序结束
此时6被固定
-------------------------------------------------------------------------------------------------------------------------
此时5被固定,虽然已经排完了,但是程序还没有run完哦
-------------------------------------------------------------------------------------------------------------------------
此时4被固定
-------------------------------------------------------------------------------------------------------------------------
此时3被固定
---------------------------------------------------------------------------------------------
此时2被固定,剩余1,程序结束
---------------------------------------------------------------------------------------------------------------------------------
——>ok,现在一共进行了6次冒泡排序法,即(数组大小-1)sz-1次