#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;
}