问题描述:
将一组数据存放在一位数组中,并将他们排好序。从键盘输入一个数,要求按原来的顺序将她插入到数组的合适位置。
算法分析:
定义数组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 }
运行结果: