通用排序函数C语言 排序函数C语言

C语言问题-设计通用排序函数

#includestdio.h

龙港网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。

#define N 999

void main()

{

paixu();

}

void paixu()

{

int i,j,a[N],temp;

printf("\n输入%d个学员的成绩:\n",N);

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

{

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

}

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

{

for(j=0;jN-1;j++)

{

if(a[j]a[j+1])//冒泡排序法

{

temp=a[j+1];

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

a[j]=temp;

}

}

}

printf("\n排序后的成绩为:\n");

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

{

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

}

printf("\n");

}

书写c语言排序函数

#include stdio.h

#include stdlib.h

#include time.h

void sort(int a[],int n)

{ int i,j,t;

for(i=0; in-1; i++) //共进行n-1轮

{ for(j=0; jn-1-i; j++) //j的范围:0~n-1-i

if(a[j]a[j+1]) //比较相邻两数:a[j]、a[j+1],如不对就交换

{ t=a[j];

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

a[j+1]=t;

}

}

}

int main()

{ int n,i,a[10000];

scanf("%d",n);

srand(time(0));

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

{ a[i]=rand()%100;

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

}

printf("\n");

sort(a,n);

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

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

printf("\n");

return 0;

}

C语言 排序 函数

一群菜鸟不懂的乱说。 我把楼主的代码改了一些,如下 #includestdio.hint 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语言之父KR的书。主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。

c语言中排序方法

1、冒泡排序(最常用)

冒泡排序是最简单的排序方法:原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。(注意每一轮都是从a[0]开始比较的)

以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。

2、鸡尾酒排序

鸡尾酒排序又称双向冒泡排序、鸡尾酒搅拌排序、搅拌排序、涟漪排序、来回排序或快乐小时排序, 是冒泡排序的一种变形。该算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。

原理:数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。然后再找到第二小的数字放到第二位,再找到第二大的数字放到倒数第二位。以此类推,直到完成排序。

3、选择排序

思路是设有10个元素a[1]-a[10],将a[1]与a[2]-a[10]比较,若a[1]比a[2]-a[10]都小,则不进行交换。若a[2]-a[10]中有一个以上比a[1]小,则将其中最大的一个与a[1]交换,此时a[1]就存放了10个数中最小的一个。同理,第二轮拿a[2]与a[3]-a[10]比较,a[2]存放a[2]-a[10]中最小的数,以此类推。

4、插入排序

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素*

一般来说,插入排序都采用in-place在数组上实现。

具体算法描述如下:

⒈ 从第一个元素开始,该元素可以认为已经被排序

⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描

⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置

⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

⒌ 将新元素插入到下一位置中

⒍ 重复步骤2~5

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语言sort函数如何使用

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语言基础类型。

以下是qsort的一个例子:

#includestdio.h

#includestdlib.h

int comp(const void*a,const void*b)//用来做比较的函数。

{

return *(int*)a-*(int*)b;

}

int main()

{

int a[10] = {2,4,1,5,5,3,7,4,1,5};//乱序的数组。

int i;

qsort(a,n,sizeof(int),comp);//调用qsort排序

for(i=0;i10;i++)//输出排序后的数组

{

printf("%d\t",array[i]);

}

return 0;

}

扩展资料:

sort函数的用法(C++排序库函数的调用)

对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了。

(一)为什么要用c++标准库里的排序函数

Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!因为它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!

(二)c++标准库里的排序函数的使用方法

I)Sort函数包含在头文件为#includealgorithm的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!

II)Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址的下一地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

Sort函数使用模板:

Sort(start,end,排序方法)

下面就具体使用sort()函数结合对数组里的十个数进行排序做一个说明!

例一:sort函数没有第三个参数,实现的是从小到大

#includeiostream

#includealgorithm

using namespace std;

int main()

{

int a[10]={9,6,3,8,5,2,7,4,1,0};

for(int i=0;i10;i++)

couta[i]endl;

sort(a,a+11);

for(int i=0;i10;i++)

couta[i]endl;

return 0;

}

编译器

GCC,GNU组织开发的开源免费的编译器

MinGW,Windows操作系统下的GCC

Clang,开源的BSD协议的基于LLVM的编译器

Visual C++ :: cl.exe,Microsoft VC++自带的编译器

集成开发环境

CodeBlocks,开源免费的C/C++ IDE

CodeLite,开源、跨平台的C/C++集成开发环境

Orwell Dev-C++,可移植的C/C++IDE

C-Free

Light Table

Visual Studio系列

Hello World

参考资料:百度百科-sort函数


本文名称:通用排序函数C语言 排序函数C语言
当前URL:http://azwzsj.com/article/dodishi.html