希尔排序问题,利用随机函数产生N个随机整数(10个以上),对这些数进行由小到大的排序

利用随机函数产生N个随机整数(10个以上),对这些数进行由小到大的排序
用c语言编写

img


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void shellSort(int *a, int len)
{
    int i, j, k, tmp, gap,cnt=1;  // gap 为步长
    for (gap = len / 2; gap > 0; gap /= 2) {  // 步长初始化为数组长度的一半,每次遍历后步长减半,
        for (i = 0; i < gap; ++i) { // 变量 i 为每次分组的第一个元素下标
            for (j = i + gap; j < len; j += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序
                tmp = a[j];  // 备份a[j]的值
                k = j - gap;  // j初始化为i的前一个元素(与i相差gap长度)
                while (k >= 0 && a[k] > tmp) {
                    a[k + gap] = a[k]; // 将在a[i]前且比tmp的值大的元素向后移动一位
                    k -= gap;
                }
                a[k + gap] = tmp;
            }
        }
        printf("第%d次增量 ",cnt++);
         for(i=0;i<=10;i++)
            printf("%d ",a[i]);
            printf("%d\n");
    }
}

int main()
{
    int i,j,x,a[11];//产生随机数
    srand((unsigned)time(NULL));//保证每次生成的随机数不一样
    for(i=0;i<=10;i++)
    {
        a[i]=rand()%(1000-99)+99;//随机数的范围(a,b)
    printf("%d ",a[i]);
    }
    printf("\n");
    shellSort(a,11);
    printf("最终结果");
        for(i=0;i<=10;i++)
            printf("%d ",a[i]);

}

https://blog.csdn.net/weixin_45642587/article/details/106969537

记得采纳


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void shellSort(int *a, int len)
{
    int i, j, k, tmp, gap,cnt=1;  // gap 为步长
    for (gap = len / 2; gap > 0; gap /= 2) {  // 步长初始化为数组长度的一半,每次遍历后步长减半,
        for (i = 0; i < gap; ++i) { // 变量 i 为每次分组的第一个元素下标
            for (j = i + gap; j < len; j += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序
                tmp = a[j];  // 备份a[j]的值
                k = j - gap;  // j初始化为i的前一个元素(与i相差gap长度)
                while (k >= 0 && a[k] > tmp) {
                    a[k + gap] = a[k]; // 将在a[i]前且比tmp的值大的元素向后移动一位
                    k -= gap;
                }
                a[k + gap] = tmp;
            }
        }
        printf("第%d次增量 ",cnt++);
         for(i=0;i<=10;i++)
            printf("%d ",a[i]);
            printf("%d\n");
    }
}
 
int main()
{
    int i,j,x,a[11];//产生随机数
    srand((unsigned)time(NULL));//保证每次生成的随机数不一样
    for(i=0;i<=10;i++)
    {
        a[i]=rand()%(1000-99)+99;//随机数的范围(a,b)
    printf("%d ",a[i]);
    }
    printf("\n");
    shellSort(a,11);
    printf("最终结果");
        for(i=0;i<=10;i++)
            printf("%d ",a[i]);
 
}