c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢相关的知识,希望对你有一定的参考价值。
给你个代码,参考一下吧#include <stdio.h>
void insert( int *a, int *n, const int num )
int i,j;
for( i=0;i<*n;i++ )
if ( num < a[i] )
break ;
for( j=*n;j>i;j-- )
a[j]=a[j-1];
a[i]=num;
(*n)++;
void show( int *a, int n )
int i;
for( i=0;i<n;i++ )
printf("%d ", a[i] );
printf("\\n");
int main()
int a[10]=1,3,5,7;
int n=4;
int i;
insert(a,&n,2);
show(a,n);
insert(a,&n,0);
show(a,n);
insert(a,&n,9);
show(a,n);
return 0;
参考技术A void main()
int val[9]=8,10,21,32,35,48,57,70,79];
int num[10];
int a,i,j;
printf("请输入一个数:\n");
scanf("%d",&a);
for(i=0;i<9;i++)
if(val[i]>=a)
num[i]=a;
for(j=i+1;j<10;j++)
num[j]=val[j-1];
i=10;
else
if(i==8)
num[i]=val[i];
num[9]=a;
else
num[i]=val[i];
参考技术B 插入数组的新数位置可知吗?追问
比如原来是012356789现在输入四,就成了0123456789
追答那我理解不是排序问题,是搜索插入点的问题
追问九个数变成十个
所以,怎么写程序。。
追答插入新数时,从前向后遍历数组元素,if(x>=a[i] & x <=a[i+1])就插入在i+1这个位置即可
& -> &&
追问这个元素数变了啊,怎么输出新的数组
怎么写就插入这个位置
追答严格的考虑这个问题的话,需要考虑,1,所有元素都比插入数小,2,所有元素都等于插入数,3,元素中等于元素个数大于1, 4元素中有一个元素等于插入数,5,数组所有元素都大于插入数
i+1到结尾的元素,按照从后到前的顺序向后移动一个位置,然后把新数插入到i+1
追问我有思路,没程序
原题发给我,我帮你写
追问接下来怎么办
追答只需要输出时把插入数放在合适的位置即可?
追问看来需要插入进去
然后在输出
追问所以,程序呢
追答int x = 0;
int a[10] = x;
int i;
int n = -1;
//搜索插入位置
for(i=1;i= a[i] && x a[1])
n = sizeof(a);
else if(x < a[sizeof(a) - 1])
n = 0;
//蒋输入位置前的所有元素前移一个位置
for(i=1; i<sizeof(a); i++)
if(i < n)
a[i-1] = a[i];
//将新数插入数组
a[i] = x;
//输出所有元素
for(i=0; i<sizeof(a);i++)
printf("%d", a[i]);
插入排序复习
基本思想将一个元素插入到有序的数组中
先假设前面的第一个元素是已经排好序的数组;不断从后面依次访问元素,放入到前面的有序数组中,根据由小到大的规则调整这个元素在有序数组中的位置(逐个比较交换),…直到当前数组结束;
还是在912. 排序数组题进行测试
基本思想步骤
class Solution
public int[] sortArray(int[] nums)
int n = nums.length;
//插入排序;
//假定前面的是有序数组,从第2个元素开始;
for(int i =1;i<n;i++)
for(int j=i;j>0;j--)
//注意是要和前面的有序数组比较;
if(nums[j]<nums[j-1])
swap(nums,j-1,j);
else
break;
return nums;
//交换方法;
private void swap(int[] nums,int a,int b)
//简单的临时变量交换法;
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
或者写成
class Solution
public int[] sortArray(int[] nums)
int n = nums.length;
//插入排序;
//假定前面的是有序数组,从第2个元素开始;
for(int i =1;i<n;i++)
for(int j=i;j>0 && nums[j]<nums[j-1];j--)
//注意是要和前面的有序数组比较;
swap(nums,j-1,j);
return nums;
//交换方法;
private void swap(int[] nums,int a,int b)
//简单的临时变量交换法;
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
当然,会超时的;
那么优化时,通过避免交换方式,
转而使用比较赋值即可;将当前数先存入一个第三方变量;
当前元素和前面的有序数组比较时,找到合适位置,将第三方变量的值放到合适位置即可;
class Solution
public int[] sortArray(int[] nums)
int n = nums.length;
//插入排序;
//假定前面的是有序数组,从第2个元素开始;
for(int i =1;i<n;i++)
int dsf = nums[i];
int j=i;
for(;j>0;j--)
//注意是要和前面的有序数组比较;
if(dsf<nums[j-1])
//若前面的值大,则把它的值覆盖到当前元素位置;
nums[j] = nums[j-1];
else
break;
//将第三方变量的值交到合适位置;
nums[j] = dsf;
return nums;
以上是关于c语言编程,已经从小到大排好的一维9元素数组在插入一个数,按顺序,怎么写程序?谢谢的主要内容,如果未能解决你的问题,请参考以下文章