2019 数列有序!
Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。n从键盘输入。rguo
ut
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4
方法一:如果插入的数比最后一个数大,则插入的数放在数组a的末尾;否则,则将插入的数依次与a[0]~a[n-1]进行比较,直到a[i]>target,说明i之前的数都小于target,i之后的都大于target,所与target就要插在a[i]与a[i-1]之间
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#define N 100
void Sort(int arr[], int m)
{//冒泡排序法
int i,j;
for (i = 0; i < m-1; i++)//趟数
{
for (j = 0; j < m- 1-i; j++)//相邻两元素进行比较
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int a[N];
int i,n;
printf("input n:");
scanf("%d", &n);
printf("input %d numbers:",n );
for (i = 0; i < n;i++)
{
scanf("%d", &a[i]);
}
int target;
int temp1, temp2,j;
printf("input the target:");
scanf("%d", &target);
Sort(a, n );
if (target > a[n-1])
{
a[n]=target;//我写这题研究了一天都是错的,问题就在这,我写成了target=a[n]就一直达不到正确目的
}
else
{
for (i = 0; i < n; i++)
{
if (a[i] > target)
{
temp1 = a[i];//把a[i]的位子让出来给target,a[i]的值暂存在temp1中
a[i] = target;
for (j = i + 1; j <= n; j++)//依次执行将位子向后移动一个
{
temp2 = a[j];//a[i+1]即a[j]的值暂存在temp2中,把位子让给a[i];
a[j] = temp1;
temp1 = temp2;//在把a[i+1]即a[j]的值暂放在temp1这个中间变量上;
}//然后执行第二次循环:把a[i+2]即a[j+1]的值存放到temp2中,继续上述操作直到最后一个元素
break;//完成上面这个循环后就不在执行第一个循环就结束了
}
}
}
for (i = 0; i <=n; i++)
{
printf("%d ", a[i]);//再将插入数字后的数组打印出来
}
}
方法二:定义一个数组,输入要插入的数,直接将插入的数放到数组的末尾,然后进行排序就行了
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#define N 30
void Sort(int arr[], int m)
{//冒泡排序法
int i,j;
for (i = 0; i < m-1; i++)//趟数
{
for (j = 0; j < m- 1-i; j++)//相邻两元素进行比较
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int a[N];
int i, j;
int target;
int n;
printf("input n:");
scanf("%d", &n);
printf("input %d numbers", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("input target:\n");
scanf("%d", &target);
a[n] = target;
Sort(a, n + 1);
//下面是选择排序的方式对数组进行排序
/*for (i = 0; i < n; i++)
for (j = 0; j < n- i; j++)
if (a[j] > a[j + 1])
{
swap = a[j];
a[j] = a[j + 1];
a[j + 1] = swap;
}*/
for (i = 0; i <=n; i++)
printf("%d ", a[i]);
return 0;
}