当前位置:首页 » 编程语言 » c语言排序时间
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言排序时间

发布时间: 2022-08-16 07:55:31

c语言 日期(年月日 ) 排序

#include "stdio.h"
#include "string.h"

//日期结构体
struct date
{
int y;//年
char m[4];//月
int d;//日
};

//比较年份
int cmpY(int a, int b)
{
//年份在90-10之间,代表1990年到2010年
if (a < 100 && a > 10)
a +=1900;
else
a += 2000;
if (b < 100 && b > 10)
b +=1900;
else
b += 2000;

if (a > b)
return 1;
else if (a == b)
return 0;
else
return -1;
}

//比较月份
int cmpM(char *a, char *b)
{
//定义字符串数组,表示12个月份的英文
char m[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int i, j;
for (i = 0; i < 12; i++)
if (strcmp(a,m[i]) == 0)
break;

for (j = 0; j < 12; j++)
if (strcmp(a,m[j]) == 0)
break;

if (i < j)
return 1;
else if (i == j)
return 0;
else
return -1;
}

//综合年,月,日比较
int cmpYMD(struct date a, struct date b)
{
if (cmpY(a.y,b.y) == -1)
return -1;
else if (cmpY(a.y,b.y) == 1)
return 1;
else
{
if (cmpM(a.m,b.m) == -1)
return -1;
else if (cmpM(a.m,b.m) == 1)
return 1;
else
{
if (a.d > b.d)
return 1;
else if(a.d == b.d)
return 0;
else
return -1;
}
}
}
void main()
{
//定义结构体数组
struct date dt[3]={
{ 0, "Jan", 11},
{99, "Feb", 22},
{ 8, "Mar", 2}};
struct date dtTemp;
int i, j;

//排序
for (i = 0; i < 3-1; i++)
for (j = i+1; j < 3; j++)
if (cmpYMD(dt[i],dt[j]) == 1)
{
dtTemp = dt[i];
dt[i] = dt[j];
dt[j] = dtTemp;
}

//输出排序过后的日期
for (i = 0; i < 3; i++)
{
printf("%d %s %d\n",dt[i].y,&dt[i].m,dt[i].d);
}
}

㈡ C语言 排序 时间

#include "stdio.h"
#include "string.h"

//日期结构体
struct date
{
char y[3];//年
char m[4];//月
int d;//日
};

//新增加,将字符串表示的年份转成整形表示
int intY(char *a)
{
int k = 0;
k += a[0] - '0';//十位上的数值
k = k*10 + (a[1] - '0');//十位上的数值乘以10再加上个位上的数值
return k;
}

//比较年份(修改后,参数类型变了)
int cmpY(char *y1, char *y2)
{
//新增加两条语句
int a = intY(y1);
int b = intY(y2);

//年份在90-10之间,代表1990年到2010年
if (a 10)
a += 1900;
else
a += 2000;
if (b 10)
b += 1900;
else
b += 2000;

if (a > b)
return 1;
else if (a == b)
return 0;
else
return -1;
}

//比较月份
int cmpM(char *a, char *b)
{
//定义字符串数组,表示12个月份的英文
char m[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
int i, j;
for (i = 0; i b.d)
return 1;
else if(a.d == b.d)
return 0;
else
return -1;
}
}
}
void main()
{
//定义结构体数组
struct date dt[3]={
{"00", "Jan", 11},
{"99", "Feb", 22},
{"08", "Mar", 2}};
struct date dtTemp;
int i, j;

//排序
for (i = 0; i < 3-1; i++)
for (j = i+1; j < 3; j++)
if (cmpYMD(dt[i],dt[j]) == 1)
{
dtTemp = dt[i];
dt[i] = dt[j];
dt[j] = dtTemp;
}

//输出排序过后的日期
for (i = 0; i < 3; i++)
{
//修改输出格式
printf("%s %s %d\n",dt[i].y,dt[i].m,dt[i].d);
}
}

㈢ C语言中用什么函数统计内部排序的次数和时间

开始记一下时间
clock之类的
结束记一下时间
做差

㈣ c语言 排序 随机函数 排序时间

你指的随机函数每次产生的长度都不一样是产生的随机数位数不一样吧,那是肯定的,而且他肯定在1~20000范围内。至于第二个问题是你输出的问题,time_t是long型的,你用float型输出肯定是0,应改为printf("t=%dms\n",t);

㈤ C语言,如何实现以前到现在的日期排序

直接用qsort吧

// crt_qsort.c
// arguments: every good boy deserves favor

/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

int main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;

/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );

/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( " %s", argv[i] );
printf( "\n" );
}

int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}

对结构体二级排序

struct In
{
int x;
int y;
}s[100];

//按照x从小到大排序,当x相等时按照y从大到小排序

int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}

qsort(s,100,sizeof(s[0]),cmp);

㈥ C语言 各常见排序法的时间复杂度 急 请简单说明

选择排序算法复杂度是O(n^2)。
插入排序是O(n^2)
快速排序快速排序是不稳定的。最理想情况算法时间复杂度O(nlog2n),最坏O(n^2)。
堆排序算法时间复杂度O(nlogn)。
归并排序的时间复杂度是O(nlog2n)。

㈦ 【菜鸟求教】,怎么用C语言,结构随机生成若干个时间并排序呀,…”

#include<stdio.h>

#include<stdlib.h>

typedefstruct_timelist

{

inth;

intm;

ints;

intsum;

struct_timelist*next;

}timelist,*ptimelist;

timelist*first;//指向链头

voidcreatime(intsize);//创建你需要的时间

voidsorttime();//对你所需要的时间排序,我是按升序

voidsortab(ptimelist*a,ptimelist*b);//把B数据给a数据

voiddisplay();//输出

voiddeletetimelist();

intmain()

{

intsize;

first=NULL;

printf("请输入你需要创建的时间个数 ");

scanf("%d",&size);

creatime(size);

stime();

display();

deletetimelist();

return0;

}

voiddisplay()

{

timelist*p;

for(p=first;p!=NULL;p=p->next)

{

printf(" %-2dh:%-2dm:%-2ds ",p->h,p->m,p->s);

}

}

voidstime()

{

intflag;

timelist*p1,*p2;//指向链表操作的当前节点

timelist*t,*tt;//用于交换

tt=malloc(sizeof(timelist));

for(p1=first;p1->next!=NULL;p1=p1->next)//冒泡排序,败笔,数据结构白学了,找不出比这更垃圾的算法了。

{

flag=0;

for(p2=first;p2->next!=NULL;p2=p2->next)

{

if(p2->sum<(p2->next)->sum)

{

flag=1;

sortab(&tt,&p2);

sortab(&p2,&(p2->next));

sortab(&(p2->next),&tt);

}

}

if(flag==0)

break;

}

free(tt);

}

voidsortab(ptimelist*a,ptimelist*b)

{

(*a)->h=(*b)->h;

(*a)->m=(*b)->m;

(*a)->s=(*b)->s;

(*a)->sum=(*b)->sum;

}

voidcreatime(intsize)

{

inti;

timelist*p;//指向链表当前的节点的指针

for(i=0;i<size;i++)

{

if(first==NULL)//如果是第一次创建

{

first=malloc(sizeof(timelist));

p=first;

p->next=NULL;

}

else//不是第一次创建,在timelist尾部增加即可

{

p->next=malloc(sizeof(timelist));

p=p->next;

p->next=NULL;

}

p->h=rand()%24;//时,分,秒

p->m=rand()%60;

p->s=rand()%60;

p->sum=p->h*3600+p->m*60+p->s;

}

}

voiddeletetimelist()

{

timelist*p=first,*b;

while(p->next!=NULL)

{

b=p;

p=p->next;

free(b);

}

free(p);

}

有什么没问题可追问

代码放在附件中