不错int main() //{ // int a[10] = { 0 }; // int n = 0;//需要插入的数 // int i = 0; // // 为了方便解释,这里把for循环的范围改成了0到8,这样数组中就只有9个元素 // for (int i = 0; i < 9; i++)//这样1大小为10的数组就有了九个元素 // { // scanf("%d\n", &a[i]); // } // scanf("%d", &n); // //三种情况 // //1.当n > a[8]时 // //将n存储在a[9]中 // // if (n >= a[8]) // { // a[9] = n; // } // //2.当n < arr1[0]时 ////将n存储在a[0]中,原有排序依次向后移一位 // // //其他情况 // // 3.在数组a中找到一个位置,使得n插入后仍保持升序的排列方式, // // 把比n大的元素都向后移动一个位置,然后把n插入到合适的位置 // // // // else // { // for (i = 8; i >= 0; i--)//从数组末尾开始向前遍历,最后一个元素是空的,so是i=8 // { // if (n <= a[i]) // { // a[i + 1] = a[i];//
#include<stdio.h> void swap(int *str,int num)// { int i,j=0,bf=0,a=str[num],c; // printf("a==%d",a); if(str[0]<=str[8]){ for(i=0;i<=num-2;i++){ if(!bf) if(str[num]<str[i+1]||str[0]>str[num]) { bf=1; c=i+1; // printf("下标==%d",str[num]); } if(bf) { str[num-j]=str[num-j-1]; j++; } } if(bf) { str[c] = a; // printf("%d=====%d\n",str[num],str[str[num]]); }} else
三拾 2023-05-04 12:46:51 |
}} else { for(i=0;i<=num-2;i++){ if(!bf) if(str[num]>str[i+1]||str[0]<str[num]) { bf=1; c=i+1; } if(bf) { str[num-j]=str[num-j-1]; j++; } } if(bf) { str[c] = a; } } } int main() { int str[10]; int i; for(i=0;i<9;i++) { scanf("%d",&str[i]); } scanf("%d",&str[i]); // printf("i==%d ",i); swap(str,i); for(i=0;i<=9;i++) { printf("%d ",str[i]); } return 0; }
发现个问题,当输入的值大于101的时候,值是排序在倒数第二,i需要小于等于9 for(i=0;i<=9;i++) { if(a[i]>=n) { c=i; break; } }
#include <stdio.h> int main() { int a[10]; int i,j; printf("请输入已经正序排序好的9个数:"); for(i=0;i<9;i++) { scanf("%d",&a[i]); } printf("请输入要插入的数值:"); scanf("%d",&a[9]); for(i=9;i>0;i--) { if(a[i-1]>a[i]) { j=a[i]; a[i]=a[i-1]; a[i-1]=j; } else { break; } } printf("排序后的数值为:\n"); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); return 0; }
#include<stdio.h> int main(void){ int a[10], i; for(i=0;i<9;i++){ scanf("%d", &a[i]); } int num; scanf("%d", &num); for(i=8;i>0;i--){ if(num > a[i]){ a[i+1]=num; break; } a[i+1] = a[i]; } for(i=0;i<10;i++){ printf("%d\n", a[i]); } return 0; }
#include <stdio.h> int main () { int a[] = {1,25,46,78,100,102,471,};// 已知的数组 可以改成用户输入 int n = sizeof a / sizeof a[0] ; // 获取数组的大小 int x , i = 0 ; scanf ("%d", &x) ; // 输入 x for ( ; x > a[i] && i != n ; i++) printf ("%d ", a[i]) ; //输出小于 x 的数 printf ("%d ", x) ; //输出 x for ( ; i < n ; i++ ) printf ("%d ", a[i]) ; //输出大于 x 的数 }
顶级程序员 2022-01-24 16:17:24 |
为什么第二个for循环中的判断条件不可以是x<=a[i]
int main () { int a[] = {1,25,46,78,100,102,471,}; int b[7] ; int n = sizeof a / sizeof a[0] ; int x , i = 0 ; scanf ("%d", &x) ; for ( ; x > a[i] && i != n ; i++) printf ("%d ", a[i]) ; printf ("%d ", x) ; for ( ; i < n ; i++ ) printf ("%d ", a[i]) ;
你这个c的话 当原有序列中没有比输入的n大的数据时 c是没有值的 会存在潜在的错误 可以将初始值定义位9 没找到比n大的数时c为9 找到了 就替换
夢 2021-04-08 22:33:28 |
int main () { int a[] = {1,25,46,78,100,102,471,}; int b[7] ; int n = sizeof a / sizeof a[0] ; int x , i = 0 ; scanf ("%d", &x) ; for ( ; x > a[i] && i != n ; i++) printf ("%d ", a[i]) ; printf ("%d ", x) ; for ( ; i < n ; i++ ) printf ("%d ", a[i]) ;