4.7 希尔(shell)排序法

4-7 ShellSort.c

 1 #include <stdio.h>
 2 #include "4-1 CreateData.c"    //生成随机数的函数
 3 #define ARRAYLEN 10    //需要排序的数据元素数量
 4 void ShellSort(int a[],int n)//希尔排序
 5 {
 6     int d,i,j,x;
 7     d=n/2;
 8     while(d>=1) //循环至增量为1时结束
 9     {
10         for(i=d;i<n;i++)
11         {
12             x=a[i]; //获取序列中的下一个数据
13             j=i-d; //序列中前一个数据的序号
14             while(j>=0 && a[j]>x) //下一个数大于前一个数
15             {
16                 a[j+d]=a[j]; //将后一个数向前移动
17                 j=j-d; //修改序号,继续向前比较
18             }
19             a[j+d]=x; //保存数据
20         }
21         d/=2;  //缩小增量
22     }
23 }
24 int main()
25 {
26     int i,a[ARRAYLEN];    //定义数组
27     for(i=0;i<ARRAYLEN;i++)    //清空数组
28         a[i]=0;
29     if(!CreateData(a,ARRAYLEN,1,100))    //判断生成随机数是否成功
30     {
31         printf("生成随机数不成功!\n");
32         getch();
33         return 1;
34     }
35     printf("原数据:");     //输出生成的随机数
36     for(i=0;i<ARRAYLEN;i++)
37         printf("%d ",a[i]);
38     printf("\n");
39     ShellSort(a,ARRAYLEN);    //调用希尔排序函数
40     printf("排序后:");
41     for(i=0;i<ARRAYLEN;i++)    //输出排序后的结果
42         printf("%d ",a[i]);
43     printf("\n");
44     getch();
45     return 0;
46 }
时间: 2024-10-12 20:35:03

4.7 希尔(shell)排序法的相关文章

插入排序和希尔(Shell)排序

Accept: 20 Submit: 29 Time Limit: 3000 mSec Memory Limit : 32768 KB Problem Description 部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度,指挥部将选择M个士兵依次进入指定地点进行防守任务,能力指数为X的士兵防守重要程度为Y的地点将得到X*Y的参考指数.现在士兵们排成一排,请你选择出连续的M个士兵依次参

排序(4)---------希尔(shell)排序(C语言实现)

由于考试耽搁了几天,不好意思~~~ 前面的介绍的三种排序算法,都属于简单排序,大家能够看下详细算法,时间复杂度基本都在0(n^2),这样呢,非常多计算机界.数学界的牛人就非常不爽了,他们在家里想啊想,吃饭的时候在想,窝粑粑的时候也在想,到底能不能把时间复杂度搞低点呢.最终,皇天不负有心人啊,王母娘娘显灵了,最终被DL. SHELL这哥们给想出来了.他所创造的希尔(shell)排序是世界上第一个打破0(n^2)的时间复杂度的算法.牛逼不? 好了,言归正传. 希尔排序: 希尔排序,也称递减增量排序算

排序算法大集锦_插入类——希尔(shell)排序

这一系列博客的特点就是--给出每趟排序的结果 本来想着好好写一下过程,弄个图片什么的,不过觉得网上的解析太多了,都比较好,所以这些博客就算是对自己的总结吧. #include <stdio.h> void ShellSort(int *m, int n) { int i,flag,gap; for(gap=n;gap!=1;) { gap/=2; do { flag=0; for(i=0;i<n-gap;i++) if(m[i]>m[i+gap]) { m[i]=m[i]^m[i+

希尔排序法(Shell Sort)

希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率. 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1

13. 蛤蟆的数据结构进阶十三排序实现之希尔排序法

13. 蛤蟆的数据结构进阶十三排序实现之希尔排序法 本篇名言:"一个人光溜溜的到这个世界来 ,最后光溜溜的离开这个世界而去 , 彻底想起来 , 名利都是身外物 ,只有尽一人的心力 , 使社会上的人多得他工作的裨益 ,是人生最愉快的事情.--邹韬奋" 下面是希尔排序法了. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47706135 1.  希尔排序 希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序

算法之排序算法-shell排序(移位法)

个人觉得移位法就是借希尔排序进行分组,插入排序进行排序 注释是上一篇的交换法. 而且这种排序的真的很快 package com.ebiz.sort; import java.text.SimpleDateFormat; import java.util.Date; /** * @author YHj * @create 2019-07-30 8:53 * shell排序-交换法 */ public class Shell{ public static void main(String[] arg

希尔排序法(缩小增量法)

2016-10-25 16:51:49 首先,要明白希尔排序法是什么.它是一种改进版的直接插入法,它是将整个无序列分割成若干小的子序列分别进行插入排序的方法. 1 #include<stdio.h> 2 3 //希尔排序法 4 void shell_sort(int a[],int n); 5 int main() 6 { 7 int i; 8 int a[6]; 9 printf("please enter five numbers:\n"); 10 for(i=1;i&

插入排序与shell排序(希尔排序)

1 .插入排序的过程如同我们平时打扑克牌取牌插入的过程,不断将取出的扑克牌插入已经排好的地方. 插入排序过程初始有序区间大小为1,取出无序区间的首元素,查找有序区间的合适位置,进行插入.不断重复上述过程,即可完成操作. 图解示例 1 //插入排序 2 //karllen @2015 3 void insertSort() 4 { 5 int i ,j ,temp; 6 for(i = 1;i<n;++i) //从第二个元素开始插入 7 { 8 temp = a[i]; //a[i]会被覆盖,临时

数据结构与算法——希尔排序(shell排序)

//希尔排序(shell排序)#include<iostream>using namespace std;void print(int a[], int n ,int i){ cout<<i <<":"; for(int j= 0; j<n; j++) { cout<<a[j] <<" "; } cout<<endl; } /* 直接插入排序的一般形式 * * d 缩小增量,如果是直接插入