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

c语言排序使用函数

发布时间: 2023-01-25 05:36:24

‘壹’ c语言怎么使用sort函数,求举个简单的例子,谢谢

用 qsort,并且要自己写比较函数。

例如:有个 int a[1000] 的数组要排序。而比较函数你已经写好了名字是 comp,则这样写:

qsort(a,1000,sizeof(int),comp);

比较函数 comp 如下:

intcomp(constvoid*a,constvoid*b)
{
return*(int*)a-*(int*)b;
}

详细的可以查一下关于 qsort 的说明。

‘贰’ c语言怎么用自定义函数排序

用冒泡排序法,代码如下:for(j=0;j<=9;j++)
//10人的总成绩进行排序
{
for
(i=0;i<10-j;i++)
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=0;i<10;i++)
//打印排序后的总分{printf("%5d",a[i]);}

‘叁’ C语言:输入5个数,用调用函数的方法,从小到大排序 用简单点的

#include<stdio.h>

voidsort(float*a,intn)

{

inti,j,tmp;

for(i=0;i<n-1;i++)

for(j=0;j<n-i-1;j++)

if(a[j]>a[j+1])

{

tmp=a[j];

a[j]=a[j+1];

a[j+1]=tmp;

}

}

voidmain()

{

floata[5];

inti;

printf("请输入五个数(逗号隔开):");

scanf("%f,%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3],&a[4]);

sort(a,5);

printf("排序后为:");

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

printf("%.2f",a[i]);

printf(" ");

}

或者三个数的。

void sort(int *a, int *b, int *c)

{

int tmp;

if(*a>*b){

tmp = *b;

*b = *a;

*a = tmp;

}

if(*a>*c){

tmp = *c;

*c = *a;

*a = tmp;

}

if(*b>*c){

tmp = *c;

*c = *b;

*b = tmp;

}

return;

}

(3)c语言排序使用函数扩展阅读:

C语言中没有预置的sort函数。如果在C语言中,遇到有调用sort函数,就是自定义的一个函数,功能一般用于排序。

一、可以编写自己的sort函数。
如下函数为将整型数组从小到大排序。void sort(int *a, int l)//a为数组地址,l为数组长度。

{

int i, j;

int v; //排序主体

for(i = 0; i < l - 1; i ++)

for(j = i+1; j < l; j ++)

{

if(a[i] > a[j])//如前面的比后面的大,则交换。

{

v = a[i];

a[i] = a[j];

a[j] = v;

}

}

}

对于这样的自定义sort函数,可以按照定义的规范来调用。

二、C语言有自有的qsort函数。
功 能: 使用快速排序例程进行排序。头文件:stdlib.h
原型:

void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

参数:

1、待排序数组首地址。

2、数组中待排序元素数量。

3、各元素的占用空间大小4 指向函数的指针,用于确定排序的顺序,这个函数必须要自己写比较函数,即使要排序的元素是int,float一类的C语言基础类型。

‘肆’ C语言中的排序函数是什么

include <cstdlib> 或 #include <stdlib.h>
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))

参数表
*base: 待排序的元素(数组,下标0起)。
num: 元素的数量。
width: 每个元素的内存空间大小(以字节为单位)。可用sizeof()测得。
int(*)compare: 指向一个比较函数。*elem1 *elem2: 指向待比较的数据。
比较函数的返回值
返回值是int类型,确定elem1与elem2的相对位置。
elem1在elem2右侧返回正数,elem1在elem2左侧返回负数。
控制返回值可以确定升序/降序。

产生随机数的函数也是rand(),不是rank().

‘伍’ c语言怎样通过函数调用实现选择排序法

c语言通过函数调用实现选择排序法:

1、写一个简单选择排序法的函数名,包含参数。int SelectSort(int * ListData,int ListLength);

2、写两个循环,在循环中应用简单选择插入排序:

int SelectSort(int * ListData,int ListLength)

{

int i , j ;

int length = ListLength;

for(i=0;i<=length-2;i++)

{

int k = i;

for(j=i+1;j<=length-1;j++)

{

if(ListData[k]>ListData[j])

{

k=j;

}

}

if(k!=i)

{

int tmp = ListData[i];

ListData[i] = ListData[k];

ListData[k] = tmp;

}

}


return 0;

}

4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:n*n。

‘陆’ c语言,使用函数的选择法排序

voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;

for(i=0;i<m-1;i++)//控制循环次数,n个数需要n-1次循环
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等于k是就证明a[i]不是最小的,
//i等于k时证明a[i]就是本轮比较过程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}

‘柒’ C语言 排序 函数

一群菜鸟不懂的乱说。 我把楼主的代码改了一些,如下 #include<stdio.h>int input(int data[], int argc, int *n)
{
int i;
printf("请输入要输入数的个数");
scanf("%d", n);
if(*n > argc) {
printf("segment fault!");
return -1;
}
for(i = 0; i < *n; i++) {
printf("输入的第%d个数.", i+1);
scanf("%d", data+i); //canf("%d", &data[i]);
}
printf("输入的数是:\n");
for(i = 0; i < *n; i++) {
printf("%5d\n", data[i]);
}
return 0;
}void sort(int n, int data[])
{
int i, j, temp;
for(i = 0; i < n-1; i++) {
for(j = i+1; j < n; j++)
if(data[i] < data[j]) {
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
printf("排序后的结果如下:\n");
for(i = 0; i < n; i++)
printf("%5d\n", data[i]);
}int main()
{
int data[100];
int n;
if(input(data, 100, &n) == -1)
return -1;
sort(n, data);
return 0;
}
对于以上代码,做出如下解释:(1)C语言的参数有形参和实参的说法,形参在传递到函数内的时候,复制一个副本给函数,在函数内部和外部是两个完全不同的变量,函数结束,空间也被释放,所以不能在函数内部来改变外部的值。所以要像楼主这样用一个函数给一个变量赋值,要用实参int input(int data[], int argc, int *n)中的int *n就是实现形式,这种办法把n的地址传递给函数。当然,在调用函数的时候也同样要传递地址指针类型(&n)。(2)if(*n > argc) {
printf("segment fault!");
return -1;
}这一段是我加进去的,因为按照楼主的意思,data数组的长度也要传递进去,但是意思何在?所以只好加了这一段,并把函数改为有类型的,以检验是否有数据溢出。(3)scanf("%d", data+i); //scanf("%d", &data[i]);这里我改动的主要原因是为了提升程序速度,scanf("%d", &data[i]);同样可以运行,但是寻址一次,又回头要地址,这样绕了一圈,没有必要。 对于楼主提几点建议:(1)C语言的精髓在于指针,刚才说到的实参,就是用指针的概念实现的。scanf("%d", data+i); 一行,同样也是把数组头指针加上偏移地址,得到所要的地址。(2)C语言编程的时候特别要注意数据的溢出,这是所有初学者头疼的问题之一。建议在一开始就养成习惯,经常检验数组的边界。(3)void main一看就知道是看潭浩强的书长大的程序员。建议我们都用int main(){ return 0; }的形式,可以看看C语言之父K&R的书。主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。