#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int Input(int a[]); //输入函数
void ShellSort(int a[], int N);
void ShellInsertSort(int a[],int N,int dk);
void Output(int a[], int N); //输出函数
int main()
{
int a[1001];
int N = Input(a);
ShellSort(a, N);
Output(a, N);
system("pause");
return 0;
}
int Input(int a[])
{
int N;
printf_s("请输入要排序的个数N\n");
scanf_s("%d", &N);
printf_s("请输入所要排序的%d个整数\n", N);
for (int i = 0; i < N; i++)
{
scanf_s("%d", &a[i]);
}
return N;
}
void ShellSort(int a[], int N)
{
int dk = N / 2;
while (dk >= 1)
{
ShellInsertSort(a,N,dk);
dk = dk / 2;
}
}
void ShellInsertSort(int a[], int N, int dk)
{
for (int i = dk; i < N; i++)
{
if (a[i] < a[i - dk])
{
int j = i - dk;
int temp = a[i];
a[i] = a[i - dk];
while (temp < a[j])
{
a[j + dk] = a[j];
j -= dk;
}
a[j + dk] = temp;
}
}
}
void Output(int a[], int N)
{
for (int i = 0; i < N; i++)
{
printf_s("%d", a[i]);
}
printf("\n");
}
#include <stdio.h>
#include <stdlib.h>
int Input(int a[]); //输入函数
void ShellSort(int a[], int N);
void ShellInsertSort(int a[],int N,int dk);
void Output(int a[], int N); //输出函数
int main()
{
int a[1001];
int N = Input(a);
ShellSort(a, N);
Output(a, N);
system("pause");
return 0;
}
int Input(int a[])
{
int N;
printf_s("请输入要排序的个数N\n");
scanf_s("%d", &N);
printf_s("请输入所要排序的%d个整数\n", N);
for (int i = 0; i < N; i++)
{
scanf_s("%d", &a[i]);
}
return N;
}
void ShellSort(int a[], int N)
{
int dk = N / 2;
while (dk >= 1)
{
ShellInsertSort(a,N,dk);
dk = dk / 2;
}
}
void ShellInsertSort(int a[], int N, int dk)
{
for (int i = dk; i < N; i++)
{
if (a[i] < a[i - dk])
{
int j = i - dk;
int temp = a[i];
a[i] = a[i - dk];
while (temp < a[j])
{
a[j + dk] = a[j];
j -= dk;
}
a[j + dk] = temp;
}
}
}
void Output(int a[], int N)
{
for (int i = 0; i < N; i++)
{
printf_s("%d", a[i]);
}
printf("\n");
}
运行结果: