已知一组已经安排升序排列好的10个数,再输入一个数,将其插入这组数中,用数组编写.
请高手速给答案,谢谢
----------------解决方案--------------------------------------------------------
插入排序法?每本数据结构书上都有
----------------解决方案--------------------------------------------------------
刚学数据结构不久顺便练练
/* 已知一组已经安排升序排列好的10个数,再输入一个数,将其插入这组数中,用数组编写. */ #include <stdio.h> #include <stdlib.h> typedef int DataType; #include "seqlist.h"
int main() { int i,k,k1,j,num; SeqList L; srand((int)time(0));
/*初始化随即*/
SetList(&L,11); /*构造函数*/
for(i=0;i<10;i++) InsertRear(&L,rand()%50);
/*随即赋10个值*/
/* 对数组排序 */ for(i=0;i<10;i++) { k=1; /* 记录是否发生交换 */
for(j=9;j>i;j--) { if(GetData(&L,j-1)>GetData(&L,j)) /* 如果前一元素大于后一元素,交换 */ { k=GetData(&L,j-1); k1=GetData(&L,j); SetData(&L,k1,j-1); SetData(&L,k,j); } }
if(k==1) /* 如果没发生交换退出 */ break; }
puts("Enter the number:"); /* 输入要插入的数字 */ scanf("%d",&num); printf("\n");
for(i=0;i<10;i++) { if(GetData(&L,i)>num) /* 找出比插入元素大的下标 */ break; }
Insert(&L,num,i); /* 在此下标处插入元素num */
for(i=0;i<11;i++) printf("%4d",GetData(&L,i));
return 0; }
----------------解决方案--------------------------------------------------------
原始
----------------解决方案--------------------------------------------------------
路过
----------------解决方案--------------------------------------------------------
2楼的
不用这么夸张吧
不过是数组中插入一个元素而已
----------------解决方案--------------------------------------------------------
#include <stdio.h> #include <stdlib.h> // for the malloc function #include <memory.h> // for the memcpy(...) int main() { const int N = 10; double num1[N] = {2,4,6,8,10,12,14,16,18,20}; // for test double aNum = 26;
// get the length this double array int length = sizeof(num1)/sizeof(double); // get the size for the new double array size_t size = (length+1)*sizeof(double);
// allocate the memory space for the new double array double * num2 = (double *)malloc(size);
memset(num2, 0, size);
// find out the appropriate the position to // insert the new value
int insertPos = 0; bool insert = true; for(int i = 0; i<N; i++) { if(aNum>num1) insertPos++; else if(aNum == num1) { insert = false; break; } else break; }
if(insert) { memcpy(num2, num1, insertPos*sizeof(double)); num2[insertPos] = aNum; memcpy(&num2[insertPos+1], &num1[insertPos], (N-insertPos)*sizeof(double)); // display for(int k = 0; k<N+1; k++) printf("%lf ", num2[k]); } else { for(int k = 0; k<N; k++) printf("%lf ", num1[k]); } printf("\n");
free(num2);
return 0; }
----------------解决方案--------------------------------------------------------
楼上的好厉害啊!
----------------解决方案--------------------------------------------------------
C++ 板块现在比较冷清,所以先来这里凑凑热闹
----------------解决方案--------------------------------------------------------
我是这样想的:将一个数插放到数组的最后面,然后重新对数组排序。
main()
{ int a[11]={1,3,5,8,9,11,16,17,20,25},i,,j,n,t;
scanf("%d",&n); a[10]=n;
for(i=0;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<=10;i++)
printf("%d,",a[i]);
printf("\n");
}
不知道对不对,还望指教!
----------------解决方案--------------------------------------------------------