LY的数据结构复习——希尔排序

shell sort,一种基于插入排序的排序方法,总体而言还是一种较为好懂的排序方法。

要想弄懂希尔排序就先得学会插入排序,那我先大致讲一下插入排序的算法。

插入排序:

1.存储数组第二个元素,然后向前遍历。

2.如果前方元素大于之前储存的元素,则将整个数组往后移动一格。

3.如果找到一个比储存元素小的元素,则将储存的元素赋予它之后的一格。

4,存储数组第三个数然后循环前三步...

代码:

void insert_sort(int array[],int size)    
{
    for(int i = 1 ; i < size ; i++)
    {
        int temp = array[i];                        //储存当前元素
        int j = i-1;                                        //从前一个向前遍历
        while(j>=0 && array[j]>temp)                //如果大于之前储存的元素,就整体后移数组
        {
            array[j+1]=array[j];
            j -= 1;
        }
        array[j+1]=temp;                              //找到后赋值
        
    }
}

希尔排序:

1.将数组分为长度为d组,每组进行插入排序。        d = (数组长度)/2

2.将d/2,继续插入排序,直到d=1再进行最后一次即结束。

代码:

#include <iostream>
#include <cmath>


using namespace std;

void insert_sort_gap(int array[],int size,int gap)            //插入排序改版,多了参数步数
{
    for(int i = gap ; i < size ; i+=gap)        //gap即为之前说的d,每隔d个元素为同组元素
    {
        int temp = array[i];                            //每组进行插入排序
        int j = i-gap;
        while(j>=0 && array[j]>temp)
        {
            array[j+gap]=array[j];
            j -= gap;
        }
        array[j+gap]=temp;
        
    }
}

void shell_sort(int array[],int size)            //希尔排序本体
{    
    int d =size/2;                                //d不断除以2
    while(d>=1)                                    //只要d>=1就继续插入
    {
        insert_sort_gap(array,size,d);
        d = d/2;
    
    }
}

int main()
{
    int a[] = {1,4,5,6,7,3,2,8,9};
    shell_sort(a,sizeof(a)/sizeof(int));
    for(int i = 0;i<sizeof(a)/sizeof(int);i++)
    {
        cout<<a[i];
    }    

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值