前言
在日常生活中,经常碰到这样一类排序问题,比如哪个排序算法最优,最快等等。接下来我们丛几个常见方法来了解一下。
提示:以下是本篇文章正文内容,下面案例可供参考
一、插入排序
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法
- 把左边第一个值作为要排到正确序号的值,令其为Key;
- 然后数组从两边向中间走,右边先走找比Key小的值,再停下左边走找比Key要大的值与右边的交换位置之后;
- 右边再先走,以此循环往复,直到左边和右边重合为止, 再将重合位置的值与Key的值进行交换。
代码如下(示例):
2、双指针法
- 确定Key值,避免数据已经有序影响排序效率,可以采取三数取中的方法优化
- 确定双指针首发位置,cur确定为Key值后一个数,prev为Key当时位置。
- cur往后走,找到比Key小的值时,与++prev位置交换,但必须保证++prev!=cur
代码如下(示例):