求助,实在写不出来,各位大佬可以帮帮忙吗
插入后自动排序(掌握用穷举法进行比较、交换)把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列。
要求:用数据指针。
2021-06-07 21:18
程序代码:#include <stdio.h>
#include <stdbool.h>
bool insert( int buf[], size_t capacity, size_t* size, int value )
{
if( capacity <= *size )
return false;
// 使用“二分法”找到第一个“大于value”的值的位置
size_t index = 0;
if( buf[0] > value )
index = 0;
else if( buf[*size-1] <= value )
index = *size;
else
for( size_t a=0,b=*size; a+1!=b; )
{
index = a + (b-a)/2;
if( buf[index] <= value )
a = index;
else
b = index;
}
// 往后挪一位,用 memmove 当然更好
++*size;
for( ; index!=*size; ++index )
{
int tmp = buf[index];
buf[index] = value;
value = tmp;
}
return true;
}
void test( int buf[], size_t capacity, size_t* size, int value )
{
bool b = insert( buf, capacity, size, value );
printf( "%s:", b?"插入成功":"容器已满" );
for( size_t i=0; i!=*size; ++i )
printf( " %d%c", buf[i], ",\n"[i+1==*size] );
}
int main( void )
{
int buf[5];
size_t size = 0;
test( buf, sizeof(buf)/sizeof(*buf), &size, 2 );
test( buf, sizeof(buf)/sizeof(*buf), &size, 0 );
test( buf, sizeof(buf)/sizeof(*buf), &size, 4 );
test( buf, sizeof(buf)/sizeof(*buf), &size, 1 );
test( buf, sizeof(buf)/sizeof(*buf), &size, 3 );
test( buf, sizeof(buf)/sizeof(*buf), &size, 5 );
}
2021-06-08 09:25
程序代码:#include <stdio.h>
#define ARLEN 100
int main(void)
{
int ar[ARLEN]={0},*pa,*pp=ar;
int m,t;
printf("Enter number:\n");
while(pp<&ar[ARLEN] && scanf("%d",&m) != EOF){
pa=ar,pp++;
for(;*pa<=m && pa<pp;pa++);
if (pa==pp)
*--pa=m;
else{
do {
t=*pa;
*pa=m;
m=t;
}while (++pa<pp);
}
}
pa=ar;
while (pa<pp)
printf("%d ",*pa++);
}
[此贴子已经被作者于2021-6-9 15:25编辑过]
2021-06-09 14:45