三种基本排序算法-冒泡排序,选择排序,插入排序

在实际应用开发中,我们经常需要用到排序算法进行数据的排序,而冒泡排序,选择排序,插入排序这三种排序算法则是比较容易理解并上手的算法。

冒泡排序基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。

冒泡排序算法代码及注释如下:

void BubbleSort(int src[], int len)			//冒泡排序函数接口,src为输入数组,len为数组长度
{
	int i, j;				
	bool flag = true;				//定义标识符,表示是否有数据交换
	for (i = 0; i < len && flag==true; i++)		//当有数据交换且数组还没遍历完的时候进行遍历
	{
		flag = false;				//将标识符置为false,表示如果后续元素没有交换,则不再进行遍历
              	/*len-2表示倒数第二个元素*/
		for (j = len-2; j >= i; j--)		//从最后元素往回遍历比较,在这里因为数组长度为len,元素下标为0~len-1,所以我写成了len-2
		{
			if (src[j] > src[j+1])		//在这里表示当前元素与后一个元素比较,如果后一个元素比较小,则交换位置
			{
				swap(src[j], src[j+1]);
				flag = true;		//表示有数据交换,所以继续遍历比较,将flag置为true
			}
		}
	}
}

选择排序基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

选择排序算法代码及注释如下:

void SelectSort(int src[], int len)			//选择排序函数接口,src为输入数组,len为数组长度
{
	int i,j,min;
	for (i = 0; i < len; i++)
	{
		min = i;				//将需要交换元素的位置置为当前下标
		for (j = i + 1; j < len; j++)		//向后遍历选出数组后续元素中最小的元素,并将其下标赋给min
		{
			if (src[j] < src[min])
				min = j;
		}
		if (i != min)				//进行下标判断,避免多余的交换
		{
			swap(src[i], src[min]);
		}
	}
}

插入排序基本思想:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。

插入排序算法代码及注释如下:

void InsertSort(int src[], int len)			//插入排序函数接口,src为输入数组,len为数组长度
{
	int i, j, temp;
	for (i = 1; i < len; i++)			//从第2个元素开始遍历
	{
		if (src[i] < src[i - 1])		//如果后一个元素比前一个元素小,则进行插入操作
		{
			temp = src[i];			//先把当前元素存放在临时变量里
			for (j = i - 1; src[j] > temp; j--)//然后逐步向前比较,将比当前元素小的值后移
			{
				src[j + 1] = src[j];
			}
			src[j + 1] = temp;		//完成插入
		}
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值