排序算法 -哈希排序


哈希排序:

  改进了得插入排序,将待排序的数组根据差量分成若干的的子数组,分别进行插入排序,最后一步当差量为1的时候也就是直接的插入排序了,只是这时数组的序列已经大概是有序的了。 关键是增量

 

代码如下:

//希尔排序
void shell(int unsort[],int dx, int lenght)
{
    for(int i = 0; i < dx; i++)
    {
        //插入排序
        for(int j = 1; i+j*dx < lenght; j++)
        {
            if(unsort[i+j*dx] < unsort[i+(j-1)*dx])
            {
                int k = j;
                int flag = unsort[i+j*dx];
                while(i+(k-1)*dx > 0 && flag < unsort[i+(k-1)*dx])
                {
                    unsort[i+k*dx] = unsort[i+(k-1)*dx];
                    k--;
                }
                unsort[i+k*dx] = flag;
            }
        }
    }
}

//这里增量的取值规则为上次增量的一半,第一次为lenght/2
void shell_sort(int unsort[], int lenght)
{
    int len = lenght;
    int dx = lenght/2;
    int i = 1;
    while(dx >= 1)
    {
        shell(unsort, dx, lenght);
        dx = dx/2;

        cout<<""<<i<<"趟:";
        for(int k = 0; k < lenght; k++)
        {
            cout<<unsort[k]<<" ";
        }
        cout<<endl;
        i++;
    }
}

结果如下:

注意:

  这个排序的方法增量的选取决定了排序的效率,一般选的是(n/2,n/4,n/8...)n为数组的长度,每次选取为上次差量值得一半

  详细步骤:

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM