0009 在有序数组中插入数据
问题描述:
将一组数据存放在一位数组中,并将他们排好序。从键盘输入一个数,要求按原来的顺序将她插入到数组的合适位置。
算法分析:
定义数组a[]用于存放输入的数据,定义len变量存储数组中数组的长度,定义变量b存放要插入的数据,定义NUM常量表示数组的最大长度,对原始数据使用冒泡排序,在插入数据时,找到插入的位置,从最后开始往前移动,空出位置将待插入数据插入。
代码展示:
1 #include<stdio.h> 2 #define NUM 20 3 void BubbleSort(int a[],int len); 4 int main(){ 5 int a[NUM]; //存放数据 6 int len=0; //表示数组中数据的个数 7 int b; //存放插入的数字 8 int i; 9 scanf("%d",&b); 10 while(b!=-1){ //循环输入原始数据 11 a[len] = b; 12 len++; 13 scanf("%d",&b); 14 } 15 BubbleSort(a,len); //冒泡排序 16 printf("冒泡排序之后的原序列为:\n"); 17 for(i=0; i<len; i++){ 18 printf("%d ",a[i]); 19 } 20 printf("\n"); 21 if(len<NUM){ //插入数据并移位放入合适位置 22 printf("请输入要插入的数字:"); 23 scanf("%d",&b); 24 i = len-1; 25 while(a[i]>b){ 26 a[i+1] = a[i]; 27 i--; 28 } 29 a[i+1] = b; 30 len++; 31 } 32 printf("插入合适位置之后的序列为:\n"); 33 for(i=0; i<len; i++){ 34 printf("%d ",a[i]); 35 } 36 return 0; 37 } 38 39 void BubbleSort(int a[], int len){ 40 int i,j; 41 int flag = 0; 42 int temp; 43 for(i=0;i<len; i++){ 44 for(j=1;j<len-i;j++){ 45 if(a[j]<a[j-1]){ 46 temp = a[j]; 47 a[j] = a[j-1]; 48 a[j-1] = temp; 49 flag = 1; 50 } 51 } 52 if(flag == 0){ 53 break; 54 } 55 } 56 }
运行结果: