zoukankan      html  css  js  c++  java
  • 插入排序(三)——shell插入排序(不稳定排序)

    //文件shell_InsertSort.cpp
    #include <stdio.h>
    #include "table.h"void shellinsertsort(table *tab)
    {
     int i,j,d;
     d=tab->length/2;
     while(d>=1)
     {
      for(i=d+1;i<=tab->length;i++)/*从第d+1个元素开始,将所有元素有序插入相应分组中*/
      {
       tab->r[0].key =tab->r.key ;/*保存第i个元素*/
       j=i-d;  /*向前找插入位置*/
       while(tab->r[0].key <tab->r[j].key&&j>0)/*这一步实质是直接插入排序,从后往前找插入位置,0的位置为哨兵*/
       {
        tab->r[j+d].key=tab->r[j].key;/*相当于将与i同一组的,将i的位置空出来,以便往后移,来找i的位置*/
        j=j-d;/*继续向前查找插入位置*/
       }
       tab->r[j+d].key=tab->r[0].key ;
      }
      d=d/2;/*继续分组来排序,直到d为1结束*/
     }
    }
    void main()
     {
      int i; table tab;
     //tab.length=7;
     
     printf("please input the length of the table \\n");
     //printf("\\n");
     scanf("%d",&tab.length );
     tab.r[0].key=0;  //getchar();//消除回车符
     printf("please input the item of the table \\n");
     
     for (i=1;i<=tab.length;i++)
     {
      scanf("%d",&tab.r.key );
      
     }
      printf("the old order \\n");
      for (i=1;i<=tab.length;i++)
     {
      printf("%d\\t",tab.r.key );
      
     }
      
      printf("\\n the new order \\n"); 
     
     shellinsertsort(&tab); for (i=1;i<=tab.length;i++)
      {
       printf("%d\\t",tab.r.key );
      }
     
     scanf("%d",&i);
     
     }
  • 相关阅读:
    判断元素的属性是否存在
    js 查找树节点 数组去重
    redis 基础知识
    jQuey知识点三 解析json数据
    jQuery知识点二 实现隔行变色
    mysql 基础操作一
    ruby 基础知识三 读写文件
    Active Record 数据迁移
    ruby 基础知识(二)
    rails 常用的知识点
  • 原文地址:https://www.cnblogs.com/zhiji6/p/1649301.html
Copyright © 2011-2022 走看看