希尔排序算法C语言完整代码
时间: 2023-12-28 21:25:47 浏览: 113
以下是希尔排序算法的C语言完整代码:
```c
#include <stdio.h>
void ShellSort(int* arr, int size) {
int gap, i, j, temp;
// 设置初始增量
for (gap = size / 2; gap > 0; gap /= 2) {
// 对每个增量进行插入排序
for (i = gap; i < size; i++) {
temp = arr[i];
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap]; }
arr[j] = temp;
}
}
}
int main() {
int arr[] = {9, 5, 1, 8, 3, 7, 4, 6, 2};
int size = sizeof(arr) / sizeof(arr[0]);
ShellSort(arr, size);
printf("排序后的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
相关问题
希尔排序的c语言完整代码
希尔排序是一种插入排序的变种,也被称为“缩小增量排序”。它通过将待排序序列分组,对每组进行插入排序,不断缩小每组中元素的间隔,最终将整个序列变成一组,再进行插入排序,从而提高排序效率。下面是希尔排序的C语言完整代码:
```c
void shellSort(int arr[], int n) {
int gap = 1;
while (gap < n / 3) {
gap = gap * 3 + 1;
}
while (gap > 0) {
for (int i = gap; i < n; i++) {
int key = arr[i];
int j = i - gap;
while (j >= 0 && arr[j] > key) {
arr[j + gap] = arr[j];
j -= gap;
}
arr[j + gap] = key;
}
gap = (gap - 1) / 3;
}
}
```
该算法的思路是:将待排序序列按照一定间隔分成若干个子序列,对每个子序列进行插入排序,不断缩小间隔,最终将间隔设为1,整个序列变成一组,再进行插入排序。具体实现时,先通过计算确定初始间隔gap,然后不断缩小gap直到1,每次对间隔为gap的子序列进行插入排序。
该算法的时间复杂度取决于间隔序列的选择,最坏情况下时间复杂度为O(n^2),但在一般情况下,效率要比简单插入排序高。
希尔排序的C语言算法
以下是希尔排序的C语言算法:
```c
void ShellSort(int* arr, int flag) {
int tap = flag; //设置排序每组的增量
while (tap > 1) {
tap = tap / 2; //(每次每组的增量)
for (int i = 0; i < flag - tap; i++)//一组一个轮流排
{
int end = i;
int label = arr[end + tap];
while (end >= 0) {
if (label < arr[end]) {
arr[end + tap] = arr[end];
end -= tap;
} else {
break;
}
}
arr[end + tap] = label;
}
}
}
```
希尔排序是一种高效的排序算法,它是插入排序的改进版。它通过将待排序的数组分成若干个子序列,对每个子序列进行插入排序,从而达到排序整个数组的目的。希尔排序的时间复杂度为O(nlogn),比插入排序的时间复杂度O(n^2)要快得多。
阅读全文