C语言题目:插入后自动排序(掌握用穷举法进行比较、交换)
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/10 18:40:53
C语言题目:插入后自动排序(掌握用穷举法进行比较、交换)
把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.
要求:用数据指针.
请写细致
我使用DEV C++6.0
由小到大的数列最好是手动输入后排序的
把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.
要求:用数据指针.
请写细致
我使用DEV C++6.0
由小到大的数列最好是手动输入后排序的
输入 1 4 3 8 9 2
输出 1 2 3 4 8 9
可以接受输入,但是写死了只能输入6个数字
下面是代码:
#include <stdio.h>
#include <stdlib.h>
/*
把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.
要求:用数据指针.
*/
typedef struct _List {
\x09int value;
\x09struct _List *next;
} List;
void insertList( List ** l ,int v)
{
\x09if( *l==NULL)/*输入链表为空*/
\x09{
\x09\x09*l = malloc(sizeof(List));
\x09\x09memset(*l,0,sizeof(List) );
\x09\x09(*l)->value = v;
\x09}
\x09else
\x09{
\x09\x09List *tmp=*l,*next,*p,*prev=NULL;
\x09\x09while(tmp)
\x09\x09{
\x09\x09\x09next = tmp->next;
\x09\x09\x09if( (!next && tmp->value < v ) || (next && tmp->value<v && next->value > v ) )/*输入值需要插入到当前遍历节点之后*/
\x09\x09\x09{
\x09\x09\x09\x09p= malloc(sizeof(List));
\x09\x09\x09\x09memset(p,0,sizeof(List) );
\x09\x09\x09\x09p->value = v;
\x09\x09\x09\x09tmp->next = p;
\x09\x09\x09\x09p->next = next;
\x09\x09\x09\x09return;
\x09\x09\x09}
\x09\x09\x09else if (tmp->value>v )/*输入值需要插入到当前遍历节点之前*/
\x09\x09\x09{
\x09\x09\x09\x09p= malloc(sizeof(List));
\x09\x09\x09\x09memset(p,0,sizeof(List) );
\x09\x09\x09\x09p->value = v;
\x09\x09\x09\x09if(!prev)
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09p->next = tmp;
\x09\x09\x09\x09\x09*l = p;
\x09\x09\x09\x09\x09return;
\x09\x09\x09\x09}
\x09\x09\x09\x09else
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09prev->next = p;
\x09\x09\x09\x09\x09p->next = tmp;
\x09\x09\x09\x09\x09return;
\x09\x09\x09\x09}
\x09\x09\x09}
\x09\x09\x09else
\x09\x09\x09{
\x09\x09\x09\x09prev = tmp;
\x09\x09\x09\x09tmp = next;
\x09\x09\x09}
\x09\x09}
\x09}
\x09return;
}
int main()
{
\x09int input [6] ;
\x09/*1 4 3 8 9 2*/
\x09List * l = NULL,*tmp;
\x09int i;
INPUT:\x09printf("pls input 6 number:");
\x09i = scanf("%d %d %d %d %d %d",input,input+1,input+2,input+3,input+4,input+5);
\x09if(i!=6)
\x09\x09goto INPUT;
\x09
\x09for(i=0;i<6;++i)
\x09\x09insertList(&l,input[i]);
\x09\x09
\x09tmp = l;
\x09while(tmp)
\x09{
\x09\x09printf("%d ",tmp->value);
\x09\x09tmp = tmp->next;
\x09}
\x09printf("\n");
\x09return 0;
}
再问: 非常抱歉,这个里边有数据结构的内容,我做的是大一C语言的,这个太明显会露馅。能提供一个简便的方法吗,可以不用自己输入已有的数列。
再答: 输出:19 22 27 29 30 40 42 45
这次用的是数组,数组程序也不好懂,因为需要将数组内容后移,没有指针移动起来简单。
不过用数组的确有很多比较和交换,比较符合出题人的意图#include <stdio.h>
#include <stdlib.h>
void insert(int *a,int b)
{
int i,*p;
if(*a == -1)/*空数组*/
{
*a=b;
return;
}
while( *a!=-1)/*-1表示位置没有放数字*/
{
if( (*(a+1)==-1 && *a <b ) || ( (*(a+1)!=-1 && *a <b && *(a+1)>b) ) )/*需要插入到当前数组下标后面*/
{
p = a+1;
while(*p++ != -1)/*移动到最后一个元素后面*/
;
while( p-- != a+1)/*元素后移*/
*p = *(p-1);
*(a+1) = b;
return;
}
else if( *a > b)/*需要插入到当前数组下标前面*/
{
p = a;
while(*p++ != -1)/*移动到最后一个元素后面*/
;
while( p-- != a)/*元素后移*/
*p = *(p-1);
*a=b;
return;
}
a++;
}
return;
}
int main()
{
int input[6] = { 22,45,30,42,19,29 };
int output[100] ;
int i;
memset(output,0xff,100*sizeof(int));/*-1表示位置没有放数字*/
output[0] = 27;
output[1] = 40;
for(i=0;i<6;++i)
insert(output,input[i]);
for(i=0;output[i]!=-1;++i)
printf("%d ",output[i]);
}
输出 1 2 3 4 8 9
可以接受输入,但是写死了只能输入6个数字
下面是代码:
#include <stdio.h>
#include <stdlib.h>
/*
把一个整数插入到按由小到大排列的数列中,插入后仍然保持由小到大的顺序排列.
要求:用数据指针.
*/
typedef struct _List {
\x09int value;
\x09struct _List *next;
} List;
void insertList( List ** l ,int v)
{
\x09if( *l==NULL)/*输入链表为空*/
\x09{
\x09\x09*l = malloc(sizeof(List));
\x09\x09memset(*l,0,sizeof(List) );
\x09\x09(*l)->value = v;
\x09}
\x09else
\x09{
\x09\x09List *tmp=*l,*next,*p,*prev=NULL;
\x09\x09while(tmp)
\x09\x09{
\x09\x09\x09next = tmp->next;
\x09\x09\x09if( (!next && tmp->value < v ) || (next && tmp->value<v && next->value > v ) )/*输入值需要插入到当前遍历节点之后*/
\x09\x09\x09{
\x09\x09\x09\x09p= malloc(sizeof(List));
\x09\x09\x09\x09memset(p,0,sizeof(List) );
\x09\x09\x09\x09p->value = v;
\x09\x09\x09\x09tmp->next = p;
\x09\x09\x09\x09p->next = next;
\x09\x09\x09\x09return;
\x09\x09\x09}
\x09\x09\x09else if (tmp->value>v )/*输入值需要插入到当前遍历节点之前*/
\x09\x09\x09{
\x09\x09\x09\x09p= malloc(sizeof(List));
\x09\x09\x09\x09memset(p,0,sizeof(List) );
\x09\x09\x09\x09p->value = v;
\x09\x09\x09\x09if(!prev)
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09p->next = tmp;
\x09\x09\x09\x09\x09*l = p;
\x09\x09\x09\x09\x09return;
\x09\x09\x09\x09}
\x09\x09\x09\x09else
\x09\x09\x09\x09{
\x09\x09\x09\x09\x09prev->next = p;
\x09\x09\x09\x09\x09p->next = tmp;
\x09\x09\x09\x09\x09return;
\x09\x09\x09\x09}
\x09\x09\x09}
\x09\x09\x09else
\x09\x09\x09{
\x09\x09\x09\x09prev = tmp;
\x09\x09\x09\x09tmp = next;
\x09\x09\x09}
\x09\x09}
\x09}
\x09return;
}
int main()
{
\x09int input [6] ;
\x09/*1 4 3 8 9 2*/
\x09List * l = NULL,*tmp;
\x09int i;
INPUT:\x09printf("pls input 6 number:");
\x09i = scanf("%d %d %d %d %d %d",input,input+1,input+2,input+3,input+4,input+5);
\x09if(i!=6)
\x09\x09goto INPUT;
\x09
\x09for(i=0;i<6;++i)
\x09\x09insertList(&l,input[i]);
\x09\x09
\x09tmp = l;
\x09while(tmp)
\x09{
\x09\x09printf("%d ",tmp->value);
\x09\x09tmp = tmp->next;
\x09}
\x09printf("\n");
\x09return 0;
}
再问: 非常抱歉,这个里边有数据结构的内容,我做的是大一C语言的,这个太明显会露馅。能提供一个简便的方法吗,可以不用自己输入已有的数列。
再答: 输出:19 22 27 29 30 40 42 45
这次用的是数组,数组程序也不好懂,因为需要将数组内容后移,没有指针移动起来简单。
不过用数组的确有很多比较和交换,比较符合出题人的意图#include <stdio.h>
#include <stdlib.h>
void insert(int *a,int b)
{
int i,*p;
if(*a == -1)/*空数组*/
{
*a=b;
return;
}
while( *a!=-1)/*-1表示位置没有放数字*/
{
if( (*(a+1)==-1 && *a <b ) || ( (*(a+1)!=-1 && *a <b && *(a+1)>b) ) )/*需要插入到当前数组下标后面*/
{
p = a+1;
while(*p++ != -1)/*移动到最后一个元素后面*/
;
while( p-- != a+1)/*元素后移*/
*p = *(p-1);
*(a+1) = b;
return;
}
else if( *a > b)/*需要插入到当前数组下标前面*/
{
p = a;
while(*p++ != -1)/*移动到最后一个元素后面*/
;
while( p-- != a)/*元素后移*/
*p = *(p-1);
*a=b;
return;
}
a++;
}
return;
}
int main()
{
int input[6] = { 22,45,30,42,19,29 };
int output[100] ;
int i;
memset(output,0xff,100*sizeof(int));/*-1表示位置没有放数字*/
output[0] = 27;
output[1] = 40;
for(i=0;i<6;++i)
insert(output,input[i]);
for(i=0;output[i]!=-1;++i)
printf("%d ",output[i]);
}
关于C语言的问题,位数大小排序(掌握数值排序算法)
跪求C语言用 穷举法 表示角谷猜想和哥德巴赫猜想
穷举法 C语言编写一个程序解决一道题
编一程序对2种排序方法进行比较:交换法、选择法、插入法、冒泡法四种方法选2.具 体比较方法是随机生成一
C#语言穷举法解决问题
C语言用冒泡排序法对数组中的8个整数(a[8]={6,8,5,4,6,9,3,2})进行从小到大排序
C语言用冒泡法和选择法对10个数进行排序
下列排序方法中,最坏情况下比较次数最少的是()为什么 A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆
C语言:下面程序使用选择排序方法对20个整数进行排序,这20个数从键盘输入,并输出排序前和排序后的数据
c语言的一题目:分别用冒泡法和选择法对10个数排序!
C语言中穷举法可以解决哪些问题?举三个以上例子?
一、实验目的:掌握常用的查找与排序算法.二、实验内容 1、用简单插入排序法,对关键字值序列为:9,2,