#include <stdio.h>
//数组的输出
void output_array(int data[], int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", data[i]);
printf("\n");
}
//交换两个数
void swap(int *a, int *b)
{
int x;
x = *a;
*a = *b;
*b = x;
}
//往数据里面插入数据
void insertion_sort(int data[], int n, int increment)
{
int i, j;
for(i = increment; i < n; i += increment)
for(j = i; j >= increment && data[j] > data[j - increment]; j -= increment)
swap(&data[j], &data[j - increment]);
}
//希尔排序
void shellsort(int data[], int n)
{
int i, j;
for(i = n / 2; i > 2; i /= 2)
for(j = 0; j < i; j++)
{
insertion_sort(data + j, n - j, i);
}
insertion_sort(data, n, 1);
}
int main()
{
int data[] = {5, 3, 1, 665, 77, 66, 44, 11, 10, 9, 8, 6};
//打印传进来的数组,调试用,非调试可以注释
output_array(data, sizeof(data)/sizeof(int));//sizeof(data)/sizeof(int) 不把长度写死,应对data传进来的数据是可变的,下同
shellsort(data, sizeof(data)/sizeof(int));
output_array(data, sizeof(data)/sizeof(int));
return 0;
}
分享到:
相关推荐
下面是一个简单的C语言希尔排序示例代码: ```c #include void insertion_sort(int arr[], int n) { for (int i = 1; i ; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j...
C语言版的希尔排序算法,可以有按照升序、降序两种方式进行排序
在C语言中,希尔排序的代码实现会包括定义希尔排序函数、插入排序函数以及主函数。插入排序函数会根据比较两个元素的大小进行交换,希尔排序函数则会调用插入排序函数并按照上述步骤操作。在主函数中,可以创建一个...
严蔚敏版希尔排序C语言的实现~ 程序简单易懂
下面我们将深入探讨希尔排序的原理、C语言实现以及如何优化这个算法。 1. **希尔排序的原理**: - 增量序列:希尔排序的核心在于选择合适的增量序列。原始的希尔排序使用了序列的每一项都除以增量的余数来划分子...
希尔排序(Shell Sort)是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔...
希尔排序(Shell Sort)是由Donald Shell在1959年提出的一种基于插入排序的改进算法。它的主要思想是通过设置一系列的增量序列,逐步减少这些增量,将待排序的元素进行分组,然后在每个小组内进行直接插入排序。这个...
在给出的C语言代码中,希尔排序的实现分为以下几个关键部分: 1. `swap`函数:这是一个通用的交换元素的函数,接受一个类型为`type`的数组和两个下标`n`和`m`作为参数,它将数组中下标为`n`和`m`的元素互换。这是...
下面是一个简单的C语言希尔排序函数示例: ```c #include void shellSort(int arr[], int n) { int gap, i, j, temp; // 希尔增量序列:n/2, n/4, ..., 1 for (gap = n / 2; gap > 0; gap /= 2) { for (i =...
### C语言实现希尔排序 希尔排序(Shell Sort)是由Donald Shell于1959年提出的一种排序算法,它是对直接插入排序的一种改进。其基本思想是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体...
对于初学者来说,通过阅读和理解这个C语言实现的希尔排序程序,可以更好地掌握排序算法的实现方式,以及如何在C语言中编写高效的代码。同时,也可以通过运行`希尔排序.exe`来验证算法的正确性,观察排序过程。在北理...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
本主题将详细探讨两种常用的排序算法——快速排序和希尔排序,并以C语言作为实现语言进行阐述。 **快速排序**是由英国计算机科学家C.A.R. Hoare在1960年提出的。它的基本思想是通过“分治”策略来实现高效排序。...
C语言实现希尔排序的代码中,定义了一个名为`shellSort`的函数,它接受一个整型数组和数组长度作为参数。首先,设置一个初始的间隔`h`,然后使用一个循环来逐渐减小间隔,直到间隔为1。在每次间隔为`h`的情况下,...
附件提供的是C语言实现的希尔排序的代码,同时提供了代码实现的结果
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本,也称为“缩小增量排序”。它的基本思想是:先将整个待排序的记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体...
C语言所有排序大全,解决了您日常上课考试学习的需要,在这里每一个程序都没有错误,其中压缩包包括了归并排序;基数排序;快速排序;冒泡排序;...希尔排序这些日常排序,因为是全集所以大家踊跃下载
#### 三、希尔排序的C语言实现 根据提供的部分源代码,我们可以看到一个完整的希尔排序程序框架。下面对关键代码段进行详细解析: ```c #include // 定义结构体类型 sqlist,用于存储数组及其长度 typedef struct...