//
// Created by liyuanshuo on 2017/3/17.
//
#include "shell_sort.h"
/*
* 希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。
*
* 希尔排序是基于插入排序的以下两点性质而提出改进方法的:
*
* 1、插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
*
* 2、但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位>
*/
/*
* 1.选择一个增量序列t1, t2, t3 ..... tk 其中ti > tj (i>j), tk = 1;
*
* 2.按照增量序列的个数k,对原始序列进行k趟排序
*
* 3.每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。
*
* 仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
*/
void shell_insert_sort( int a[], int n, int dk )
{
for (int i = dk; i < n; ++i)
{
if( a[i] < a[i-dk] )
{
int j = i - dk;
int x = a[i];
a[i] = a[i-dk];
while ( x < a[j] )
{
a[j+dk] = a[j];
j -= dk;
}
a[j+dk] = x;
}
}
}
void shell_sort( int a[], int n)
{
int dk = n / 2;
while ( dk >= 1 )
{
shell_insert_sort (a, n, dk);
dk /= 2;
}
}
排序总结----希尔排序
最新推荐文章于 2022-07-19 14:24:17 发布