第68节 首尝排序—冒泡排序法

一.算法思想

方法: 相邻两数比较,若前大后小,则交换 (升序排列)
在这里插入图片描述

二.算法实现

n=6个数的排序n个数的排序
需要5趟的扫描(0~4)需要n-1趟的扫描(0~n-2)
第0趟扫描,从a[0]和a[1]比较开始,至a[4]和a[5]比较为止,最大的数保存在a[5]中第0趟扫描,从a[0]和a[1]比较开始,至a[n-2]和a[n-1]比较为止,最大的数保存在a[n-1]中
第1趟扫描,从a[0]和a[1]比较开始,至a[3]和a[4]比较为止,最大的数保存在a[4]中第1趟扫描,从a[0]和a[1]比较开始,至a[n-3]和a[n-2]比较为止,最大的数保存在a[n-2]中
…………
……第i趟扫描,从a[0]和a[1]比较开始,至a[n-i-2]和a[n-i-1]比较为止,最大的数保存在a[n-i-1]中
…………
最后1次扫描,a[0]和a[1]比较开始,大值保存在a[1],小值在a[0]中最后1次扫描,a[0]和a[1]比较开始,大值保存在a[1],小值在a[0]中

三.算法描述

void bubble_sort(int a[], int n) /自定义冒泡算法函数;
{
	int i, j, t; /i,j用于循环计数,t为中间变量;
	for (i = 0; i < n - 1; ++i) /有n个数,需要比较n-1,0~n-2就是n-1{
		for (j = 0; j < n - 1 - i; ++j) /比较n-1,再减去i(比较完成的次数)
			if (a[j] > a[j + 1]) /比较相邻两数,进行交换;
			{
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
	}
}

四.算法实例

#include <stdio.h>
#define n 10
int main()
{
	int i, j, t, a[n] = { 123,5,9,11,33,6,9,76,100,3 };
	for (i = 0; i < n - 1; ++i)
	{
		for (j = 0; j < n - 1 - i; ++j)
		{
			if (a[j] > a[j + 1])
			{
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
	for (i = 0; i < n; ++i)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
运行结果:
3 5 6 9 9 11 33 76 100 123
#include <stdio.h>
void bubble_sort(char a[], int n);
int main()
{
	int i;
	char d[10] = { 'a','r','v', 'p','o','m','e','t','u','c' };
	bubble_sort(d, 10);
	for (i = 0; i < 10; i++)
		printf("%c ", d[i]);
	return 0;
}
void bubble_sort(char a[], int n)
{
	int i, j;
	char t;
	for (j = 0; j < n - 1; j++)
	{
		for (i = 0; i < n - j - 1; i++)
		{
			if (a[i] > a[i + 1])
			{
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}
}
运行结果:
a c e m o p r t u v
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值