前言
本文分享了对 冒泡排序 的学习,主要分享了其作用,思路,步骤,结构。
关于作用
冒泡排序 可以将一组没有顺序的整型数据 按照大小的升序或者降序排列;
例如将 1354 排列成 1345 或 5431 ;
关于思路
1.要达成排序的目的,肯定需要比较大小;
2.而只能两个数之间比较大小,所以要用到循环语句;
3.升序的话,需要将最大的放最后,最小的放最前,想到比较大小之后,大的数往右换位;
4.假设数组有 n 个元素,想到需要循环 n-1 个轮次,每个轮次中相邻元素依次比较,换位;
5.考虑到后面已经排好的元素不需要比较,所以第 i 轮只需比较 n-1-i 次;(i 从0开始)
5.我们只编写函数,所以不用考虑被排序数组的内容是什么;
关于步骤 (以升序举例)
1.编写函数名
void bubblesort (int arr [ ] ,int sz)
注: sz 是数组的元素个数,需要在函数外部用 sizeof 计算,在函数内部计算是错误的;
因为传入函数的只是数组名,也就是首元素地址。
2.编写大的轮次
int i = 0;
for (i=0;i<sz-1;i++)
{
}
3.编写小的轮次
int j = 0;
for ( j=0;j<sz-1-i;j++ )
{
if ( arr [ j ] > arr [ j+1 ] )
{
swap( &arr[ j ],&arr[ j+1] );
}
}
4.编写交换函数
void swap (int* a,int* b)
{
int c = *a;
*a = *b;
*b = c;
}
5.组合成一体
void bubblesort(int arr[], int sz)
{
int i = 0;
for (i = 0;i < sz - 1;i++)
{
int j = 0;
for (j = 0;j < sz - 1 - i;j++)
{
if (arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
}
}
}
}
6.代入实例测试一下
#include<stdio.h>
void swap(int* a, int* b)
{
int c = *a;
*a = *b;
*b = c;
}
void bubblesort(int arr[], int sz)
{
int i = 0;
for (i = 0;i < sz - 1;i++)
{
int j = 0;
for (j = 0;j < sz - 1 - i;j++)
{
if (arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
}
}
}
}
int main()
{
int arr[] = { 1,5,9,3,2,6,4,8,7,0,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubblesort(arr , sz);
int d = 0;
for (d = 0;d < sz;d++)
{
printf("%d ", arr[d]);
}
return 0;
}
7.易错提醒
交换函数 的参数要用指针的形式,不然无法实现对实参的交换。
写在最后
谢谢你看我的文章,感谢。