the c programming language 上的希尔排序代码

本文介绍了一种改进的排序算法——Shell排序,并详细展示了其在C语言中的实现过程。此外,还提供了二分查找算法的具体实现,用于在有序数组中高效查找目标元素。通过这两个算法的结合使用,可以提高数据处理的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include<stdlib.h>

void shellsort(int v[], int n);
int binsearch(int x, int v[], int n);
int main() {
  
    int v[] = { 49,38,65,97,76,13,27,49,55,04 };
    shellsort(v, 10);
    for (int i = 0; i < 10; i++) {
        printf("%6d  ", v[i]);
    }
    getchar();
}


//二分查找方法
int binsearch(int x, int v[], int n) {
    int low, high, mid;
    low = 0;
    high = n - 1;
    while (low <= high) {
        mid = (low + high) / 2;
        if (x < v[mid]) {
            high = mid - 1;
        }
        else if (x > v[mid]) {
            low = mid + 1;
        }
        else {
            return mid;
        }
    }
    return -1;
}
    void shellsort(int v[], int n)
    {
        int gap, i, j, temp;//gap为增量
        for (gap = n / 2; gap > 0; gap /= 2)//最外层循环为增量的变化,从n/2一直到增量为1,最后一次增量一定为1
            for (i = gap; i < n; i++)//该循环为第二层循环,实际上该循环的作用是辅助第三层的直接插入排序i,从初始增量开始,到9结束,每次i的变化是让间隔增量的两个数比较
                for (j = i - gap; j >= 0 && v[j] > v[j + gap]; j -= gap) {//该循环实际上就是间隔增量下的直接插入排序,j的变化需要第二层循环的辅助
                    temp = v[j];
                    v[j] = v[j + gap];
                    v[j + gap] = temp;
                }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值