c语言名字排序函数 c语言排序的函数

c语言中排序方法

1、冒泡排序(最常用)

创新互联是专业的湄潭网站建设公司,湄潭接单;提供成都做网站、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行湄潭网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

冒泡排序是最简单的排序方法:原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。(注意每一轮都是从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语言中输入5个学生的信息(包括姓名,性别,电话),怎么用sort函数将姓名按字典顺序排列并输出

#includeiostream

#includealgorithm

#includestring.h

using namespace std;

#define NUM 100

struct Str{char str[20];};

bool cmp(Str a,Str b)

{

return strcmp(a.str,b.str)0;

}

int main()

{

int n;

Str str[NUM];

scanf("%d%*c",n);//输入人的个数

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

gets(str[i].str);//依次输入每个人的姓名,用回车键隔开

sort(str,str+n,cmp);

printf("排序后:\n");

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

puts(str[i].str);

return 0;

}

这样子可以吗?

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

#include stdio.h

#include string.h#define NUM 3

struct student

{

char name[20]; /*姓名*/

long num; /*12位学号*/

double sum; /*总分*/

};

void Create_Students(struct student stu[NUM])

{

struct student *p;

printf("请输入学生姓名 学号(12位) 总分:\n");

for( p = stu; p stu+NUM; p++)

{

scanf("%s %d %lf",p-name,p-num,p-sum); }

}

void Order_Students(struct student stu[NUM])//起泡法

{

int i,j;

struct student temp;

for(i=NUM-1;i=0;i--)

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

if(stu[j].sumstu[j+1].sum)

{

temp = stu[j];

stu[j] = stu[j+1];

stu[j+1]=temp;

}

}

void main()

{

int i=1;

struct student *p;

struct student stu[NUM];

Create_Students(stu);

Order_Students(stu);

printf("%-20s %-13s %-6s %4s\n","姓名","学号(12位)","总成绩","名次");

for(p=stu;pstu+NUM;p++,i++)

{

printf("%-20s %-13.0d %-8.2f %2d\n",p-name,p-num,p-sum,i);

}

}//你参考参考,嘿

c语言程序 中文按首字母排序

#include stdio.h

#include string.h

#define MAX_NAME 20 //最大名字长度

#define MAX_NUM 100 //最大学生人数

void sort_bubble(char (*pc)[MAX_NAME],int n)//排序函数

{

int i,j;

char str[MAX_NAME];

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

{

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

{

if(strcmp(pc[i],pc[j])0)

{

strcpy(str,pc[i]);

strcpy(pc[i],pc[j]);

strcpy(pc[j],str);

}

}

}

}

void display_name(char (*pc)[MAX_NAME],int n)//显示这n个姓名

{

int i;

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

{

printf("%s\n",pc[i]);

}

}

int main()

{

int i=1,n;

char str[MAX_NUM][MAX_NAME];

printf("请输入学生总数:");

scanf("%d",n);

while(i=n)

{

printf("请输入第%d个学生姓名:",i);

scanf("%s",str[i++-1]);

}

printf("排序前的学生名单如下:\n");

display_name(str,n);

sort_bubble(str,n);

printf("排序后的学生名单如下:\n");

display_name(str,n);

return 0;

}

说明:

1:采用的是冒泡排序,用快速排序当然快些,但我忘了

2:已验证通过,结果正确。

3:随意输入人数和姓名,只要数组不越界就没有问题!

4:两个函数:排序和显示

5:给分+好评

编写C语言程序,定义函数:输入若干学生姓名;定义函数:进行排列;输入排序结果。

#include string.h

/*输入若干学生姓名*/

void ReadName(char *name[],int n)

{ int i;

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

gets(name[i]);

}

/*进行排序,从小到大*/

void sort(char *name[],int n)

{

char mStr[80];

int i,j;

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

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

{ if(strcmp(name[i],name[j])0)

{ strcpy(mStr,name[i]);

strcpy(name[i],name[j]);

strcpy(name[j],mStr);

}

}

}

}

/* 输出 */

void Output(char *name[],int n)

{

int i;

for(i=0;in;i++) puts(name[i]);

}


网页题目:c语言名字排序函数 c语言排序的函数
浏览地址:http://azwzsj.com/article/dodsogg.html