当前位置: 代码迷 >> C语言 >> 高手求解---急用,请速给答案
  详细解决方案

高手求解---急用,请速给答案

热度:724   发布时间:2004-04-30 17:57:00.0
高手求解---急用,请速给答案

已知一组已经安排升序排列好的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");

}

不知道对不对,还望指教!


----------------解决方案--------------------------------------------------------
  相关解决方案