习题二(工程名为102、源程序名为102)
插入排序法的伪代码描述如下:
算法1.6 InsertionSort(参见Page 8-9)
输入:数组A[1…n]
输出:按升序排列的数组A[1…n]
- for i←2 to n
-
Insertion (i)
3.end for
过程Insertion(i)
- x←A[i]
- j←i-1
- while (j>0) and (A[j]>x)
-
A[j+1]←A[j]
-
j←j-1
- end while
- A[j+1]←x
用C语言实现上述算法并上机通过。
选做题:用递归方法(归纳法)实现插入排序法。
// *******************************************************
// * 工 程 名:102.dsp *
// * 程 序 名:102.cpp *
// * 主要功能:插入排序法 *
// * 编制时间:2019年11月19日 *
// ********************************************************
#include<stdio.h>
int main(void)
{
int n;
printf(“请输入一个整数:”);
scanf("%d",&n);
printf(“请输入%d个整数:”,n);
int a[n+1],i,j,t;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
t=a[i];
j=i-1;
while((j>=0)&&(a[j]>t))
{
a[j+1]=a[j];
j=j-1;
}
if(j!=i-1)
a[j+1]=t;
}
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
// *******************************************************
// * 工 程 名:102选做.dsp *
// * 程 序 名:102选做.cpp *
// * 主要功能:插入排序法递归实现 * *
// * 编制时间:2019年11月19日 *
// ********************************************************
#include<stdio.h>
void Isort(int a[],int n,int k)
{
if(k<=0)
{
return;
}
int i;
int t,j;
for(i=1;i<n;i++)
{
t=a[i];j=i-1;
while((j>=0)&&(a[j]>t))
{
a[j+1]=a[j];
j=j-1;
}
if(j!=i-1)
a[j+1]=t;
}
Isort(a,n,k-1);
}
int main(void)
{
int n;
printf(“请输入一个整数:”);
scanf("%d",&n);
int k=n;
int a[n+1];
int i;
printf(“请输入%d个整数:”,n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
Isort(a,n,k);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}