原有数组从大到小排序:
先给出思路:让插入的数依次与数列中的数比较,直到小于这一个数,此时,就可以从原数列的最后一项开始全部往后推一位,直到比较的这项,最后将要插入的数插进去即可。
代码如下:
先对原数列进行排序,这里可用选择法
#include<stdio.h>
int main()
{
int i, j, a[11], t;
printf("enter 10 new numbers:");
for (i = 0; i < 10; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < 9; i++)
{
for (j = i+1; j < 10; j++)
{
if (a[i] < a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
printf("原数组的排序为:\n");
for (i = 0; i < 10; i++)
printf("%-4d", a[i]);
}
也可以使用气泡法:
#include<stdio.h>
int main()
{
//数组的气泡法
int i, j, a[11], t;
printf("enter 10 new numbers:");
for (i = 0; i < 10; i++)
scanf_s("%d", &a[i]);
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9 - j; i++)
{
if (a[i] < a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
printf("原有数列的顺序为:\n");
for (i = 0; i < 10; i++)
printf("%-4d", a[i]);
}
接下来插入一个数字即可:
printf("\nenter a new number:\n");
scanf_s("%d", &t);
for (i = 0; i < 10; i++)
{
if (t < a[9])
a[10] = t;
else
if (t > a[i])
{
j = 9;
while (j >= i)
{
a[j+ 1] = a[j];
j--;
}
a[i] = t;
break;//跳出循环
}
}
for (i = 0; i < 11; i++)
printf("%-4d", a[i]);
return 0;
}
完整代码如下:
#include<stdio.h>
int main()
{
//数组的气泡法
int i, j, a[11], t;
printf("enter 10 new numbers:");
for (i = 0; i < 10; i++)
scanf_s("%d", &a[i]);
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9 - j; i++)
{
if (a[i] < a[i + 1])
{
t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
printf("原有数列的顺序为:\n");
for (i = 0; i < 10; i++)
printf("%-4d", a[i]);
printf("\nenter a new number:\n");
scanf_s("%d", &t);
for (i = 0; i < 10; i++)
{
if (t < a[9])
a[10] = t;
else
if (t > a[i])
{
j = 9;
while (j >= i)
{
a[j+ 1] = a[j];
j--;
}
a[i] = t;
break;//跳出循环
}
}
for (i = 0; i < 11; i++)
printf("%-4d", a[i]);
return 0;
}
结果: