C程序设计第六章作业 4
问:
有一组已经排序好的数据 现在要进行数据插入 并且按照原数据方式进行排序
答:
从大到小版本:
#include<stdio.h> //数据插入
int main() {
int i = 0, j = 0, k = 0, l = 0;
int Num[11] = { 19,17,15,13,11,9,7,5,3,1};
int Temp1 = 0, Temp2 = 0, End = 0, NewNumber = 0;
printf("Source data is :\n");
for (i = 0; i < 10; i++) {
printf("%d\t", Num[i]);
}
printf("\n");
printf("Insert data :\n");
scanf("%d", &NewNumber);//获取将要插入的数据
End = Num[9];//标记指向最后一个数字
if (NewNumber < End) {//因为当前排序为从小到大 所以判定如果比最后一个数字大 就将数据插入在最后一个位置
Num[10] = NewNumber;
}
else {//开始寻找相应要插入位置 并且向后搓数据
for (j = 0; j < 10; j++) {
if (Num[j] < NewNumber) {//如果当前位置比要插入数据大
Temp1 = Num[j];//暂存此数据
Num[j] = NewNumber;//将此位置插入数据
for (k = j + 1; k < 11; k++) {//开始向后搓数据 (因为Num[j]位置已确定 所以 k=j+1)
Temp2 = Num[k];//缓存当前数据
Num[k] = Temp1;//读取上一次缓存的“Num[j]”数据 赋值给当前位置 ,并且第二次及运行时读取k的上一个数据
Temp1 = Temp2;//重新赋值给Temp1 获得k-1 的数据
}
break;//执行完搓数据操作直接退出循环
}
}
}
printf("New data is :\n");
for (i = 0; i < 11; i++) {
printf("%d\t", Num[i]);
}
return 0;
}
运行截图:

从小到大版本:
#include<stdio.h> //数据插入 从小到大版本
int main() {
int i = 0, j = 0, k = 0, l = 0;
int Num[11] = { 1,3,5,7,9,11,13,15,17,19 };
int Temp1 = 0, Temp2 = 0, End = 0, NewNumber = 0;
printf("Source data is :\n");
for (i = 0; i < 10; i++) {
printf("%d\t", Num[i]);
}
printf("\n");
printf("Insert data :\n");
scanf("%d", &NewNumber);//获取将要插入的数据
End = Num[9];//标记指向最后一个数字
if (NewNumber > End) {//因为当前排序为从小到大 所以判定如果比最后一个数字大 就将数据插入在最后一个位置
Num[10] = NewNumber;
}
else {//开始寻找相应要插入位置 并且向后搓数据
for (j = 0; j < 10; j++) {
if (Num[j] > NewNumber) {//如果当前位置比要插入数据大
Temp1 = Num[j];//暂存此数据
Num[j] = NewNumber;//将此位置插入数据
for (k = j + 1; k < 11; k++) {//开始向后搓数据 (因为Num[j]位置已确定 所以 k=j+1)
Temp2 = Num[k];//缓存当前数据
Num[k] = Temp1;//读取上一次缓存的“Num[j]”数据 赋值给当前位置 ,并且第二次及运行时读取k的上一个数据
Temp1 = Temp2;//重新赋值给Temp1 获得k-1 的数据
}
break;//执行完搓数据操作直接退出循环
}
}
}
printf("New data is :\n");
for (i = 0; i < 11; i++) {
printf("%d\t", Num[i]);
}
return 0;
}
运行截图:
