想用c语言,先依次定义一组数组,之后在将数组排列,然后向数组中插入一个数据排序依旧成立
代码可以跑,排序也可以正常运行,但无法正常插入数据,代码如下
#include
#define s 10
int main()
{
int sz[s+1], num;
for (int i = 0; i < s; i++) {
scanf_s("%d", &sz[i]);
printf("sz[%d]=%d\n",i,sz[i]);
}
printf("输出经排序后所得的数组\n");
for (int r = 0; r < s; r++) {
for (int e = 0; e < s - r - 1; e++) {
if (sz[e] > sz[e + 1]) {
int n = sz[e];
sz[e] = sz[e + 1];
sz[e + 1] = n;
}
}
}
for (int i = 0; i < s; i++)
printf("%d\n", sz[i]);
printf("请输入你希望加入的值:");
scanf_s("%d", &num);
for (int j = 0; j < s; j++) {
if (num >= sz[j]) {
for (int i = s; i >= j; i--) {
sz[i] = sz[i - 1];
}
}
}
for (int x = 0; x < s+1; x++) {
printf("%d\n", sz[x]);
}
return 0;
}
希望可以指出错误,改正后希望可以帮忙优化一下(大一新生,学c语言一个月,希望不要太难)
int main()
{
int s = 10;
int sz[10 + 1], num;
for (int i = 0; i < s; i++) {
scanf_s("%d", &sz[i]);
printf("sz[%d]=%d\n", i, sz[i]);
}
printf("输出经排序后所得的数组\n");
for (int r = 0; r < s; r++) {
for (int e = 0; e < s - r - 1; e++) {
if (sz[e] > sz[e + 1]) {
int n = sz[e];
sz[e] = sz[e + 1];
sz[e + 1] = n;
}
}
}
for (int i = 0; i < s; i++)
printf("%d\n", sz[i]);
printf("请输入你希望加入的值:");
scanf_s("%d", &num);
for (int j = 0; j < s; j++) {
if (num < sz[j]) {
int i = s;
for (; i > j; i--) {
sz[i] = sz[i - 1];
}
sz[i] = num;
break;
}
}
for (int x = 0; x < s + 1; x++) {
printf("%d\n", sz[x]);
}
return 0;
}
应该是因为判断插入数据的位置和插入数组元素有问题,此题可以按三种情况来进行分析:
一、当要插入的数小于等于数组第一个位置的数时,把数组原来的元素往后移动一个位置,然后把要插入的数num放在数组第一个位置即可 ;
二、当要插入的数num大于数组输入的最后一个数时,把要插入的数num直接放在原数组最后一个数之后即可;
三、当要插入的数大于等于数组某个位置的数又小于等于数组某个位置后面的数,把数组插入后面一个位置,然后把原来后面位置的数往后移动一个位置即可,修改如下:
#include<stdio.h>
#define s 10
int main()
{
int sz[s+1], num;
for (int i = 0; i < s; i++) {
scanf("%d", &sz[i]);
printf("sz[%d]=%d\n",i,sz[i]);
}
printf("输出经排序后所得的数组\n");
for (int r = 0; r < s; r++) {
for (int e = 0; e < s - r - 1; e++) {
if (sz[e] > sz[e + 1]) {
int n = sz[e];
sz[e] = sz[e + 1];
sz[e + 1] = n;
}
}
}
for (int i = 0; i < s; i++)
printf("%d ", sz[i]);
printf("\n请输入你希望加入的值:");
scanf("%d", &num);
for (int j = 0; j < s-1; j++) {
//当要插入的数小于等于数组第一个位置的数时,把数组原来的元素往后移动一个位置,然后把要插入的数num放在数组第一个位置即可
if(num<=sz[0]){
for(int i=s;i>0;i--){
sz[i] = sz[i-1];
}
sz[0] = num;
break;
}
//当要插入的数num大于等于数组最后一个数,即可在原数组最后一个数后面插入num
if(num>=sz[s-1]){
sz[s] = num;
break;
}
//当插入的数num大于等于当前下标为j位置的数,并且小于等于后面下标标为j+1位置的数,表示插入的数可以放置在后面下标为j+1位置
//当前下标为j位置以前的数不变,原来后面下标为j+1位置往后的数往后移动一个位置即可,插入的数放入后面下标为j+1的位置
if ((num >= sz[j]&&num<=sz[j+1]) ){
for (int i = s; i > j+1; i--) {
sz[i] = sz[i - 1];
}
sz[j+1] = num;
break; //插入数据后即可退出循环
}
}
for (int x = 0; x < s+1; x++) {
printf("%d ", sz[x]);
}
return 0;
}