数据结构之常见排序


前言

在日常生活中,经常碰到这样一类排序问题,比如哪个排序算法最优,最快等等。接下来我们丛几个常见方法来了解一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、插入排序

1.、直接插入排序

思想:依次尾插入数据,从后向前对比排序。
在这里插入图片描述

在这里插入图片描述
从前向后依次输入数据,以两个数据为例,令已有数据a[end]=3,等待插入数据tmp=a[end+1]=2。

	if(tmp<a[end])
	{
		a[end+1]=a[end];
		end--
	}
	else
	{
		break;
	}
a[end+1]=tmp;

2、希尔排序

思想:在直接排序的基础上,先进行预排序,优先将比较大数据整体往后移或者往前移

代码如下(示例):
在这里插入图片描述

二、选择排序

1、直接选择排序

从左至右遍历数据,挑选出最小和最大的放在数据最左边和最右边
代码如下(示例):
在这里插入图片描述


三、交换排序

1、冒泡排序

从左至右依次,两两比较,再交换位置,一趟将一个最小或者最大的放至最右边,再采取多趟循环排完整个数据
代码如下(示例):
在这里插入图片描述

四、快速排序

1、hoare法

  1. 把左边第一个值作为要排到正确序号的值,令其为Key;
  2. 然后数组从两边向中间走,右边先走找比Key小的值,再停下左边走找比Key要大的值与右边的交换位置之后;
  3. 右边再先走,以此循环往复,直到左边和右边重合为止, 再将重合位置的值与Key的值进行交换。

代码如下(示例):
在这里插入图片描述

2、双指针法

  1. 确定Key值,避免数据已经有序影响排序效率,可以采取三数取中的方法优化
  2. 确定双指针首发位置,cur确定为Key值后一个数,prev为Key当时位置。
  3. cur往后走,找到比Key小的值时,与++prev位置交换,但必须保证++prev!=cur

代码如下(示例):

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值