第一种是比较常见的方法,简单来说关键步骤就两步,第一步是找出元素要插入的位置,第二步是将插入位置的元素以及后面的元素全部往后位移。
#include<stdio.h> int ?main () { ?? ?int a[11] = {1,2,3,4,5,6,7,8,9,10}; ?//定义一个数组,可以多放一个元素 ?? ?int number,i,j; ?? ?scanf("%d",&number); ?? ?if(number>a[9]) ? ? ? ? ? ?//如果新加入的元素是最大的,就直接加入到最后一位 ?? ??? ?a[10]=number; ?? ?else ?? ?{ ?? ??? ?for( i=0;i<10;i++) ?? ??? ? ?? ??? ??? ?if(a[i]>number) ? ? //找到第一个比number大的数 ?? ??? ??? ?{ ?? ??? ??? ??? ?for(j=10;j>i;j--) ?? ??? ??? ?a[j+1]=a[j]; ? ?//依次往后退一位 ?? ??? ??? ?a[i]=number; ?? ??? ??? ?break; ?? ??? ??? ?} ?? ????} ?? ? ?? ?for(i=0;i<11;i++) ?? ??? ?printf("%d\n",a[i]); ?? ?? return 0 ;? ?? }
第二种是找到插入元素的位置下标,然后将后面元素的下标都加一位,最后在将这个元素放进来。
#include <stdio.h> int main() { ?? ?int data[11]={1,2,3,4,5,6,7,8,9,10}; ?? ?int m,index; ?? ?printf("请输入一个整数:"); ?? ?scanf("%d",&m); ?? ?if(m<=data[0])? ? ? ? ? ? ?//特殊情况 ,如果m是最小的 则直接放到第一个元素的位置 ?? ??? ?index=0; ?? ?else if(m>=data[9])? ? ?// 如果m是最大的,直接放到最后一个元素的位置 ?? ??? ? ?index=10; ?? ?else ?? ?{ ?? ??? ?for(int i=0;i<9;i++) ?? ??? ?{ ?? ??? ??? ?if(m>=data[i] && m<=data[i+1])? ? ? //如果m再两个元素之间,m的下标 index就等于 i+1 ?? ??? ??? ?index=i+1; ?? ??? ??? ?break; ?? ??? ?} ?? ?}?? ? ?? ?for(int i=8;i>=index;i-- ) ?? ??? ?data[i+1] = data[i]; ?? ?data[index] = m; ?? ?for(int i=0;i<10;i++) ?? ?{?? ? ?? ??? ?printf("%-5d",data[i]); ?? ?} ?? ?return 0;?? ? }?? ?
|