数据结构排序算法有哪些?排序算法有多种,可是归纳起来经典排序算法有如下几种,下面随客服一起去熟悉。
数据结构经典排序算法有哪些?
1、插入排序法
插入排序就是把当前待排序的元素插入到一个现在排好序的列表里面。 一个特别形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。
插入排序的第一坏运行时间是O(n2), 所以并不是第一优的排序算法。
比如输入数组现在是排好序的话,插入排序出现第一佳状态,其运行时间是输入规模的一个线性函数。
比如输入数组是逆序排列的,将出现第一坏状态。平均状态与第一坏状态一样,其时间代价是Θ(n2)。
2、冒泡排序
根本思想:
在要排序的一组数中,对当前还未排好序的界限,畛域,范畴,规模,边界,领域内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
即:每当两相邻的数比较后发现它们的排序与排序条件相反时,就将它们互换。
第一次比较排序的结果:会把其中第一大的数据排到第一大的索引处
第二次比较排序后的结果:因为第一次现在把第一大的一个数据放到了第一大的索引的地方,所以谁次要进行比较的数据比数组里面的元素的数据个数-1个,而第二大的数据也会排到第二大的索引处
第三次比较排序的结果:跟第二次差不多,只是谁次要进行比较的数据比数组里面的元素的数据个数还少了2个,
第四次:少3个...
综上所述,要使数组里面的数据参考从小到大排序,总的比较的次数会比数组的长度-1次,而随着比较的次数的增加,每次要进行比较的数据依次减少。
希尔排序,也称递减增量排序算法,是插入排序的一种顶级效的改进版本。希尔排序是非稳定排序算法。
希尔排序是基于插入排序的以下两点性质而提出改进方法的:
插入排序在对几乎现在排好序的数据操作时,效率高,即可能达到线性排序的效率;
不过插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。
实现:
先取一个正整数d1 < n, 把全部相隔d1的记录放一组,任何一个组内进行直接插入排序;然后d2 < d1,重复上述分组和排序操作;直至di = 1,即全部记录放进一个组中排序为止。
4、抉择排序
根本方法:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,第一小值出现在了第一小索引处,第二次找到第二小的值。
具体是怎么样实现呢?
第一轮是0索引上的数据依次跟后面各个索引上的数据进行比较,直到遇到一个比它小的数据,谁时候,谁个小的数据就替换掉0索引上原来的数据,接着谁个替换掉的数据继续跟它原来的索引位置的后面的索引上的数据进行比较也就是说,进行完第一轮后,0索引上的数据肯定是谁个数组上第一小的数据
第二轮接着就是1索引上的数据来跟后面的数据进行比较,谁个时候参与比较的数据比原来少了一个
第三轮又会少一个,谁样循环一轮j的值就会+1,也就是j开始的索引下标+1。
归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。
归并排序的实现分为递归实现与非递归(迭代)实现。递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大不懂的地方分割成小不懂的地方分别解决,然后用全部小不懂的地方的答案来解决整个大不懂的地方。非递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整个数组。
实现
1、请求空间,使其大小为两个现在排序序列之和,该空间用来存放合并后的序列。
2、设定两个指针,第一初位置分别为两个现在排序序列的起始位置。
3、比较两个指针所指向的元素,抉择相对小的元素放入到合并空间,并移动指针到下一位置。
4、重复步骤3直到某一指针到达序列尾。
5、将另一序列剩下的全部元素直接复制到合并序列尾。