#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <malloc.h> int main() { int n,i,j,min;//首先,接受并创建n4个字节的数组 scanf("%d", &n);//用动态内存分配定义数组 int A, * B; A=(int*)malloc(nsizeof(int));//(int)是强制类型转换,因为malloc函数返回来的是void*类型的指针 B = A; for (i = 0; i < n; i++) { scanf("%d", &A[i]); }

/*for(i=0;i<n;i++)
printf("%d ", A[i]);*///注释掉后面的可以看看当前数组里面数字是什么,用来检查和理解

for (i = 0; i < n; i++)//删去重复数字,把多余的数字全部变成0
{
	if(A[i]>0)
		for (j = i + 1; j < n; j++)
		{
			if (A[j] == A[i])
				A[j] =0;
		}
}

//for(i=0;i<n;i++)
//	printf("%d ", A[i]);

for (i = 0; i < n; i++)
{
		min = A[i];//从当前最为最小往数组后面比较,如果min大了,就把min记为当前比较的数组的值,然后把这个位置的值和min记住的数组的值调换位置,这样最后数组就从小到大排序了
		for (j = i + 1; j < n; j++)
		{
			if (A[j] <= A[i])//小于等于是因为还有0的存在,最后把0都排到整个数组的前方
			{
				min = A[j];//A[i]相当于是最小的位置,有比他小就换位置,最后的结果就是从小到大(我的方法里面包括0)
				A[j] = A[i];
				A[i] = min;
			}
		}
		A[i] = min;
 }
//for(i=0;i<n;i++)
//	printf("%d ", A[i]);

 for(i=0;i< n;i++)//按从小到大输出数组,不输出0
	 if(A[i]!=0)
printf("%d ", A[i]);


return 0;

}