再进一步(C语言 冒泡排序)

                                                                        前言

本文分享了对 冒泡排序 的学习,主要分享了其作用,思路,步骤,结构。

                                                                   关于作用

冒泡排序 可以将一组没有顺序的整型数据 按照大小的升序或者降序排列;

例如将 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.易错提醒

交换函数 的参数要用指针的形式,不然无法实现对实参的交换。

                                                                    写在最后

谢谢你看我的文章,感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值