算法导论初涉,第一讲练习内容
#include<stdio.h>
#define N 6
int A[N];
void Init()//初始化数组
{
int a;
printf("输入%d个数进行归并排序:",N);
for(a=0;a<N;a++)
scanf("%d",&A[a]); //浏览数组A中第二个a的地址
}
void InsertionSort(int A[],int n)
{
int i,j,k;
for(j=1;j<n;j++)
{
k=A[j];
i=j-1;
while(i>=0 && A[i]>k) //错误点 插入排序前面的元素是有序的
{
A[i+1]=A[i];
i--;
}
A[i+1]=k;
}
}
void OutPut(int A[],int n)
{
for(int i=0;i<n;i++)
printf("%d ",A[i]);
}
void Merge(int low,int mid,int high)
{
int B[N],s,l,i,k;
s=low;
l=mid+1;
i=0; //为B数组计数赋值
while(s<=mid && l<=high)
{
(A[s]<=A[l])?(B[i++]=A[s++]):(B[i++]=A[l++]);
}
while(s<=mid)
B[i++]=A[s++];
while(l<=high)
B[i++]=A[l++];
for(i=0,k=low;i<=high-low;i++,k++)
A[k]=B[i];
}
void MergeSort(int low,int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
MergeSort(low,mid);
MergeSort(mid+1,high);
Merge(low,mid,high);
}
}
void main()
{
int A[N]={5,9,23,1,2443,-54};
InsertionSort(A,N);
// Init();
// MergeSort(0,N-1);
OutPut(A,N);
}