利用随机函数产生N个随机整数(10个以上),对这些数进行由小到大的排序
用c语言编写
#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]);
}