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

c语言值乱序在哪里排

发布时间: 2022-06-07 01:19:26

❶ 如何用c语言排序

试想一下,如果让你自己设计qsort函数,需要些什么东西,首地址要有吧,总共有几个元素要有吧,每个元素占多大的内存要有吧(想想就知道函数内部要根据内存块的大小交换数据实现排序),最后一个规则总要有吧,qsort的灵活性在于规则是活的不是死的,其实大多数语言的排序都是类似的机制啦。。。看下qsort的原型
void
qsort(void
*base,int
nelem,int
width,int
(*fcmp)(const
void
*,const
void
*));
base就是所谓的首地址,nelem就是元素个数,width,就是每个元素的大小,fcmp是一个函数指针,这里函数的定义要类似于int
cmp(const
void*a,const
void*b),其实很多人不知道怎么使用qsort主要是在于对这个函数不懂得如何写,其实想想就知道函数把每个元素的地址扔给比较函数,根据比较函数的返回值来决定到底是a在前面还是b在前面,所以在函数里面要先取出值,所以一般的写法就是
int
cmp(const
void*a,const
void*b)
{
return
*(t*)a-*(t*)b;
}
先强制转换成t类型再用取值符号*取出指,函数之所以用空指针是因为空指针可以指向任何类型,对于基本类型,只要将t修改为基本类型就行了,对于结构体之类的的指针,则return
((t*)a)->x-((t*)b)->x;其中t就是结构体的名称,x就是你要比较的字段,当然如果你要降序的话就将ab颠倒就行了,说了这么多,写一个例子,比如要对下面的数组排序
int
a[5]={2,10,5,4,0};
qsort(a,5,sizeof(int),cmp);
比较函数
int
cmp(const
void*a,const
void*b)
{
return
*(int*)a-*(int*)b;
}
。。呵呵,啰嗦了点。希望对你有帮助

❷ C语言有什么办法把一定范围里的数子打乱顺序

洗牌的话自然先要从洗牌的本来面目考虑啊x_x

不过楼上的太写实了...

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

void main()
{
int a[52];

srand(time(0));

a[0] = 0;

for (int i = 1; i < 52; i++)
{
int p = rand() % i;
int t = a[p];

a[p] = i;
a[i] = t;
}
}

❸ c语言如何随机打乱数组

int a[] = {3,5,7,1,4};
// 本程序考虑时间复杂度最小情况的乱序算法,O(t)=len-1
// 算法模仿彩票摇号,从全集中先取一个为第一位,再在剩余集合中取出一个为第2位,...
// 直至最后一个,只是考虑空间利用,已排序集合利用全集的空间。
int len=sizeof(a); // 全集元素数量
srand(unsigned(time(NULL))); // 摇号机准备
for(int i=len;i>1;i--) // 从全集开始摇号,直至只剩一个,已排在最后
{
int cur=len-i+(rand()%i); // 在剩余集合中摇号
int tmp=a[len-i]; // 当前序号位置挪空
a[len-i]=a[cur]; // 摇出的彩球放入当前序号
a[lcur]=tmp; // 放好剩余的彩球
}

❹ 怎样用C语言打乱一个已排序的数组

如果要求不是很严格的话,感觉可以随机交换N次,每次交换,随机生成两个交换的元素的下标。

如果要求严格随机的话,感觉可以依次从数组里无放回的取数,并按照取数的先后顺序放入一个新的数组,然后新的数组就是打乱顺序之后的数组了。

❺ 用C语言对数组内元素乱序排列并输出

方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。 (代码我就不写了。)
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。

❻ C语言 把乱序12345按顺序排列

意思写清楚一些

❼ C语言中如何将数组乱序

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
int a[] = {3,5,7,1,4};
int n=5;
int i,j,T=1000,tmp;
srand(unsigned(time(NULL)));
while(T--)
{
i=rand()%n;
j=rand()%n;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
for(i=0;i<n;i++)printf("%d ",a[i]);
puts("");
return 0;
}

❽ c语言 输出结果 成了乱序

很正常啊 你什么编译器?

❾ 关于c语言排序问题

#include
<stdio.h>
#include
<stdlib.h>
main()
{

int
a,b,c,t;

scanf("%d%d%d",&a,&b,&c);

if(a>b)

{t=a;a=b;b=t;}

if(a>c)

{t=a;a=c;c=t;}

if(b>c)

{t=b;b=c;c=t;}

printf("%d%d%d",a,b,c);

system("pause");

}