Shell排序(希尔排序)

本文详细介绍了希尔排序算法的核心概念、具体实现步骤以及时间复杂度评估,通过实例演示了如何使用该算法对数据进行排序。

一、算法原理

希尔排序又称为“缩小排序”算法,是对直接插入排序方法的改进

希尔排序算法的基本思想是:先将整个待排记录序列分割成若干个子序列,然后分别进行直接插入排序,待整个序列

中的记录基本有序时,再对全体记录进行一次直接排序

二、算法举例

48 | 37 | 64 | 96 | 75 | 12 | 26 | 48 |54 | 3

三、算法实现


//shell排序
void ShellSort(int *data,int n){

  int* delta; //增量序列
  int i,j;
  int k;
  int dk;
  int t;
  //产生增量
  delta = (int*)malloc(sizeof(int)*(n/2));
  i = 0;
  do{
    k = k/2;
    delta[i++] = k;

  }while(k>0);
  i = 0;
  while((dk = delta[i])>0){
     for(k = delta[i];k < n;k++){
         //将元素data[k]插入有序增量标中
         if(data[k]<data[k-dk]){
            t = data[k]; //备份要插入元素
         for(j=k-dk;j>=0&&t<data[j];j-=dk){
            data[j+dk] = data[j];
         }
         data[j+dk] = t; //找到插入的位置,插入元素
         }
         ++i;
      }
     }
    free(delta);
  }


四、算法复杂度分析

shell排序是一中不稳定的排序方法,据统计分析其时间复杂度约为O(n^1.3),排序过程中需要一个元素的辅助空间用于

数组元素值的交换,空间复杂度为O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值