c语言中的shell排序

  1  #include <stdio.h>
  2  #include <time.h>
  3  #include <stdlib.h>
  4 
  5 void shellsort(int *arr,int len)
  6 {
  7      int i=0;
  8      int n=len/2;      //n表示同一组中2个数之间的偏移量
  9      while(n>=1)    //代表每次除以2后的数为零退出循环相当于给10个数分组详细看图下方
 10     {                       //下面相当于直接插序
 11         for(i = n;i<len;i++)
 12         {
 13             if(arr[i] < arr[i-n]) //第i的元素小于 i - n的元素移动,大于不做任何处理。  第一次            i=5的元素与0位置元素比较,i++后i=6,i与1位置的i比较依次类推,第二次i变为2与0位         置的元素比较依次类推。
 14                     {
 15                         int j = i - n;   
 16                         int temp = arr[i];             
 17                         while(temp < arr[j] && j >= 0)//寻找插入位置
 18                         {
 19                             arr[j+n] = arr[j];
 20                             j = j - n;
 21                        }
 22                         arr[j+n] = temp;//将元素插入该位置
                   }               
 24                   }
 25           n = n/2;
 26       }     
 27 }
 28 
 29   int main(int argc, char *argv[])
 30    {
 31     int arr[10]={0};
 32     int i = 0;
 33     srand((unsigned)time(0));  //生成一个随机数
 34     for( i = 0;i<10;i++){
 35         arr[i] = rand()%100;  //循环生成一个随机数大小在100以类为共10个并打印出来
 36         printf("%d ",arr[i]);
 37     }
 38     printf("\n");
 39 
 40   shellsort(arr,10);   //调用shellsort函数
 41   for(i = 0;i<10;i++){
 42   printf("%d ",arr[i]); //循环打印排序后的数
 43   }
  printf("\n");
 45     return 0;
 46 }
 

结果:

分组图直到所有元素都在一个组类结束该循环

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值