希尔排序的算法代码

2016-02-19 11:03 1 1 收藏

下面是个超简单的希尔排序的算法代码教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - 编程语言 】

希尔排序的时间复杂度为O(n*log2n) 空间复杂度为O(1)是一种不稳定的排序算法

思想:希尔排序也是一种插入排序方法,实际上是一种分组插入方法。先取定一个小于n的整数d1作为第一个增量,把表的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序;然后,取第二个增量d2(<d1),重复上述的分组和排序,直至所取的增量dt=1(dtdt-1…d2d1),即所有记录放在同一组中进行直接插入排序为止。   

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

代码如下:

void ShellSort(int* data ,int length)
{
    if( data == NULL || length = 0 )
        return;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

    int d = length/2;  //步长
    while( d )
    {
        for(int i = 0 ; i d ; ++i) //根据步长分成组,对每组进行插入排序
        {
            //插入排序
            for(int j = i+d; j length ; j +=d )
            {
                if( data[j] data[j -d])
                {
                    int temp = data[j]; //哨兵
                    int k = j-d;
                    for(; k =0&& temp data[k]; k -=d)
                    {
                        data[k+d] =data[k];
                    }
                    data[k+d] =temp;
                }
            }
        }
        d = d/2;
    }
}

来源:https://www.tulaoshi.com/n/20160219/1596420.html

延伸阅读
总在写 总在错, 面试也还忘记 学习就是这么个过程, 温故才知新, 望自己谨记 忘记不要紧 复习就好 //排序是有很多种方法的 ,完成从小到大的排列 代码如下: #include stdio.h void sort(int *a,int len) {int i=0;  int j;  int t;     for(i=0;ilen;i++)     {     &n...
标签: Web开发
终极目的:想做一个方便的排序功能。 具体实现:点击后可以输入排序的数字编号,移开后自动更新数据库。 1,我想把这个功能用span来完成,也就需要一个在页面上监控指定的span的东西,他就是: ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。 $(document).ready(function(){ // 在这里写你的代码... }); 2,页面上span...
代码如下: #includestdio.h  void move(char a,char b)  {      printf("%c-%c\n",a,b);  }  void han(int n,char a,char b,char c)  {      if(n0)      {          han(n-1,a,c,b);    &nbs...
选择排序法SelectionSort(int arr[],int n) template typename T void SelectionSort(T arr[],int n) { int smallIndex;   //表中最小元素的下标 int pass,j;       //用来扫描子表的下标 T temp;         &nb...
首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 代码如下: View Code  //将有序数组a[]和b[]合并到c[]中  void MemeryArray(int a[], int n, int b[], int m, int c...

经验教程

161

收藏

17
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部