现在的位置: 首页 > 综合 > 正文

插入排序&归并排序

2019年04月22日 ⁄ 综合 ⁄ 共 820字 ⁄ 字号 评论关闭
算法导论初涉,第一讲练习内容
#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);

}

【上篇】
【下篇】

抱歉!评论已关闭.