栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

两者简单的比较方法:冒泡法和比较法。

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两者简单的比较方法:冒泡法和比较法。

C语言

冒泡法
原理:

从前向后两两比较,如果前面大于后面,则交换 每一次交换确定一个值。因为最大的值在最后因此也称为沉石法。

代码如下:

void BubbleSort(int* arr, int len)
{
	for (int i = 0; i < len - 1; i++) //控制层数
	{
		for (int j = 0; j < len - 1 - i; j++) //控制次数
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

选择法
原理:

每一轮将待排序序列中最小值和待排序序列的第一个值进行交换。

代码如下:

void InsectSort(int* arr, int len)
{
	int minindex = 0;
	for (int i = 0; i < len - 1; i++)//控制层数
	{
		minindex = i;
		for (int j = i; j < len; j++)//找到待排序序列的最小值所在的下标   //优化:int j =i+1;
		{
			if (arr[j] < arr[minindex])
			{
				minindex = j;
			}
		}
		if (minindex != i)//优化:当最小值所在下标和带排序序列的第一个值 不是用一个的时候,才交换
		{
			int tmp = arr[i];
			arr[i] = arr[minindex];
			arr[minindex] = tmp;
		}
	}
}

总结

  1. 两种比较方法都是进行for循环的嵌套;
  2. 两种比较方法中for循环的嵌套第一层都是控制层数,第二次控制比较的次数;
  3. 对于选择法而言,是找到待排序序列的最小值所在的下标,这样才可以将交换的值正确放进交换的位置,不然进行的只是值传递。

应用:将数组3,6,1,9,2,7按照从小到大的顺序排序。

#include
#include
void Show(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("n");
}
int main()
{
	int arr[] = { 3,6,1,9,2,7 };
	//BubbleSort(arr, sizeof(arr)/sizeof(arr[0]));
	InsectSort(arr, sizeof(arr) / sizeof(arr[0]));
	Show(arr, sizeof(arr) / sizeof(arr[0]));
	return 0;
}

运行结果:
冒泡法.

选择法.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号