C程序设计第六章作业 4

程序员成长之旅 · 程序员成长之旅/C语言/习题(C语言程序设计)/第六章习题 · 767 字

问:

有一组已经排序好的数据 现在要进行数据插入  并且按照原数据方式进行排序

答:

从大到小版本:

#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;

}

运行截图: