c语言有序函数代码 c语言数列有序

c语言中的排序代码 ,求大神,有木有?

上面既有排序,又有合并,不想要合并的话,把跟这个函数有关的函数,和调用删除就行了!!!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网络空间、营销软件、网站建设、鄂托克前网站维护、网站推广。

#includestdio.h

#includestdlib.h

struct LNode //创建链表结点

{ int data;

struct LNode *next;

};

struct LNode *creat() //链表创建函数

{ struct LNode *head,*p,*rear;

int x,n;

head=(struct LNode *)malloc(sizeof(struct LNode));//链表头指针

rear=head;

puts("输入链表元素,以0结束:");

scanf("%d",x); //链表元素输入

while(x) //链表节点链接

{ p=(struct LNode *)malloc(sizeof(struct LNode));

p-data=x; rear-next=p;

rear=p; scanf("%d",x);

}

rear-next=NULL;

return head-next; //返回链表中第一个有值结点地址

}

struct LNode *Merger_Linklist( struct LNode *L1,struct LNode *L2 ) //链表合并函数

{ struct LNode *p;

for(p=L1;p-next!=NULL;p=p-next) //查找链表L1的尾结点地址

{ if(p-next==NULL)

break;

}

p-next =L2; //将链表L2链接在L1之后

return L1;

}

struct LNode *Rand(struct LNode *L) //链表排序函数

{ struct LNode *Cur; //当前节点

struct LNode *Next; //遍历未排序节点

struct LNode *min; //指向未排序节点中最小节点

int temp;

for(Cur = L; Cur-next!= NULL; Cur = Cur-next)

//从头节点的下一个节点开始,一直到倒数第二个节点

{ min = Cur;

for(Next = Cur-next; Next != NULL; Next = Next-next)

{ if(min-data Next-data)

{min = Next;}

}

temp = Cur-data; //链表数值交换

Cur-data = min-data;

min-data = temp;

}

return L;

}

void print(struct LNode *head,char a) //链表打印函数

{ struct LNode *p;

p=head;

printf("%c = ( ",a);

while( p )

{ printf("%d ",p-data);

p=p-next;

}

puts(" )\n");

}

struct LNode *DeleteC_Linklist( struct LNode *L )//删除链表重复数

{ int key,had;

struct LNode *h,*p,*r,*q;

for(p=L;p-next!=NULL;p=p-next)

{ had = p-data;

for(r=p,q=p-next;q!=NULL;)

{ key = q-data;

if( key==had )

{ r-next=q-next; h=q;

q=q-next; free( h );

}

else

{ q=q-next; r=r-next;

}

}

}

return L;

}

void main () //主函数

{ struct LNode *L1,*L2,*L3;

char a='A',b='B',c='C',d='D';

L1 = creat(); //创建链表L1

Rand(L1); //对L1排序

puts("\n创建的链表经排序后为:");

print(L1,a);

L2 = creat(); //创建链表L2

Rand(L2); //对L2排序

puts("\n创建的链表经排序后为:");

print(L2,b);

L3=Merger_Linklist( L1,L2 ); //合并链表L1和L2

Rand(L3); //对合并后的链表排序

puts("合并后的链表为:");

print(L3,c);

DeleteC_Linklist( L3 );

printf("删除重复数后的链表为:\n");

print(L3,d); //打印删除后的链表

}

C语言用函数写个代码来给数字大小序号排序

#includestdio.h

#define N 100

void paixu(int *, int *, int);//声明函数

int main()

{

int a[N],c[N];

int i,n=0;

printf("请输入n个整数:");

for(i=0;;i++)

{

scanf("%d",a[i]);

n++;

if(getchar()=='\n')

break;

}

paixu(a, c, n);//调用函数,数组只需给出数组名

return 0;

}

void paixu(int a[N],int c[N], int n)

{

int i,j,s=0;

for(i=0;in;i++)

{

c[i]=0;

}

for(i=0;in;i++)

for(j=i+1;jn;j++)

{

if(a[i]==a[j])

c[i]=1;

}

for(i=0;in;i++)

{

s=1;

for(j=0;jn;j++)

{

if(c[j]==0a[i]a[j])

{

s++;

}

}

printf("%d ",s);

}

}

一维数组的有序插入,用C语言写。

以下是一个可能的实现,包括insertX函数和主函数示例:

#include stdio.h

int insertX(int* pa, int n, int x) {

int i, j;

// 找到插入位置

for (i = 0; i n; i++) {

if (pa[i] x) {

break;

}

}

// 将插入位置后的元素后移

for (j = n; j i; j--) {

pa[j] = pa[j - 1];

}

// 插入元素

pa[i] = x;

// 返回插入后数组的长度

return n + 1;

}

int main() {

int n, x;

printf("请输入有序数列的长度n:");

scanf("%d", n);

int a[n];

printf("请输入%d个有序整数:\n", n);

for (int i = 0; i n; i++) {

scanf("%d", a[i]);

}

printf("请输入要插入的整数x:");

scanf("%d", x);

n = insertX(a, n, x);

printf("插入后的有序整数为:\n");

for (int i = 0; i n; i++) {

printf("%d ", a[i]);

}

printf("\n");

return 0;

}

在上述代码中,我们定义了一个insertX函数来实现将一个整数x插入到一个有序数组中的功能。该函数的参数包括一个指向数组首地址的指针pa,数组的长度n,以及要插入的整数x。函数的具体实现过程如下:

遍历数组,找到插入位置,即第一个大于x的元素的位置i;

将插入位置后的元素后移一位;

在插入位置处插入x;

返回插入后数组的长度n+1。

在主函数中,我们先输入有序数列的长度n和n个有序整数,然后输入要插入的整数x。接着调用insertX函数将x插入到数组中,并输出插入后的有序整数序列。

需要注意的是,上述代码并没有对输入的数据进行范围检查,如果输入的数据不符合要求,程序可能会出现错误。因此,在实际使用中应该添加相应的数据检查和错误处理机制。

用c语言编写函数,对给定两个有序(升序)一维数组a,b进行合并,构成有序数组c。

#includestdio.h

#includestdlib.h

#includelimits.h

#define datelimit 1000 + 1 + 1

#define n 5

#define m 5 //datelimit 是最大的数组数 注意别开爆 n和m是a、b两队列的元素数用的时候修改后面的数字就可以了

int main()

{

int a[datelimit],b[datelimit],c[datelimit * 2];

int i,j,head;

int inf = INT_MAX;

for(i = 1 ;i = n;i++)

3scanf("%d",a[i]);

for(i = 1 ;i = m;i++)

scanf("%d",b[i]);

a[n + 1] = inf ;

b[m + 1] = inf ; //处理a或b的队列已经出完

i = 1;

j = 1;

head = 1;

while(i = n + 1 j = m + 1)

{

if(a[i] b[j])

{

c[head] = b[j];

head ++;

j ++;

}

else

{

c[head] = a[i];

head ++;

i ++;

}

} //进入c队列

for(i = 1 ;i = n + m;i++)

printf("%d ",c[i]);

system("pause"); //最好删去这一句 以免使用时出错

return 0;

}


文章名称:c语言有序函数代码 c语言数列有序
分享URL:http://scyanting.com/article/dopecsd.html