一个简单排序函数c语言 c语言写排序函数

寻求c语言5种以上的简单的排序方法

//    直接插入排序 

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了城口免费建站欢迎大家使用!

void StaInsertSort(int a[], int n)

{

int i, j, tmp;

for(i = 1; i  n; ++i)

{

tmp = a[i];

j = i-1;

while(j=0  tmpa[j])

{

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

--j;

}

a[j+1] = tmp;

}

}

/* 折半排序 */

void MidSort(int a[], int n)

{

int i, j;

int low, high, mid;

int tmp;

for(i = 1; i  n; i++)

{

tmp = a[i];

low = 0, high = i-1;

while(low = high)

{

mid = (low+high)/2;

if(a[mid]  tmp)

high = mid-1;

else

low  = mid+1;

}

low = high, high = i;

while(high  low+1)

{

a[high] = a[high-1];

--high;

}

a[low+1] = tmp;

}

}

/* 冒泡排序 */

void MaoPaoSort(int a[], int n)

{

int i, j;

int tmp;

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

{

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

{

if(a[i]  a[j])

{

tmp  = a[i];

a[i] = a[j];

a[j] = tmp;

}

}

}

}

/* 快速排序 */        

void QuickSort(int a[], int low, int high)

{

int i, j;

int tmp;

if(low  high)

{

i = low, j = high;

tmp = a[low];

while(i  j)

{

while(ij  a[j]=tmp)

--j;

a[i] = a[j];

while(ij  a[i]=tmp)

++i;

a[j] = a[i];

}

a[i] = tmp;

QuickSort(a, low, i-1);

QuickSort(a, i+1, high);

}

}

/* 选择排序 */        

void SelectSort(int *a, int n)

{

int i, j, k;

int tmp;

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

{

k = i;

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

if(a[k]  a[j])

k = j;

tmp  = a[i];

a[i] = a[k];

a[k] = tmp;

}

}

/* 堆排序 */

void Sift(int a[], int low, int high)    //堆调整函数

{

int i = low, j = 2*i+1;

int tmp = a[i];

while(j = high)

{

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

++j;

if(tmp  a[j])

{

a[i] = a[j];

i = j;

j = 2*i+1;

}

else

break;

}

a[i] = tmp;

}

void HeapSort(int a[], int n)    //堆排序函数 

{

int i;

int tmp;

for(i = n/2-1; i = 0; --i)

Sift(a, i, n-1);

for(i = n-1; i = 1; --i)

{

tmp  = a[0];

a[0] = a[i];

a[i] = tmp;

Sift(a, 0, i-1);

}

}

如何用C语言编写一个排序程序

楼上的用的是C++

若单纯的用C那就是这样

#includestdio.h

#define

print

"NO.%d

%d

%d

%d

%d

%3.2f

%3.2f\n",1+i,stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com,stu[i].aver,stu[i].total//宏定义节约时间

struct

student

{

int

num;

int

mat;

int

ENG;

int

com;

float

aver;

float

total;

}stu[10];//定义结构体变量

void

main()

{

int

i;

void

take_turn_print(struct

student

stu1[10])

;

float

sum(int

x,int

y,int

z);//声明求和函数

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

scanf("%d%d%d%d",stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com);

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

{

stu[i].total=sum(stu[i].mat,stu[i].ENG,stu[i].com);//调用求和函数

stu[i].aver=stu[i].total/3;

}

take_turn_print(stu);//调用排序

打印函数

}

void

take_turn_print(struct

student

stu1[10])

{

void

change(int

*x,int

*y);//声明换位函数

void

change1(float

*x,float

*y);//声明换位函数

int

i,j;

for(j=0;j9;j++)//冒泡排序

为理解简单

就没用别的排序方法

哈哈

{

for(i=0;i9-j;i++)

{

if(stu1[i].averstu1[i+1].aver)

{

change(stu1[i].num,stu1[i+1].num);//

值交换

change(stu1[i].mat,stu1[i+1].mat);//

值交换

change(stu1[i].ENG,stu1[i+1].ENG);//

值交换

change(stu1[i].com,stu1[i+1].com);//

值交换

change1(stu1[i].aver,stu1[i+1].aver);//

值交换

change1(stu1[i].total,stu1[i+1].total);//

值交换

}

}

}

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

printf(print);//打印

}

void

change(int

*x,int

*y)

{

int

i;

i=*x;

*x=*y;

*y=i;//利用指针做变量替换

}

void

change1(float

*x,float

*y)

{

float

i;

i=*x;

*x=*y;

*y=i;//利用指针做变量替换

}

float

sum(int

x,int

y,int

z)

{

float

i;

i=(float)(x+y+z);

return(i);

}

前几天也是帮同学做这样的题

一模一样

看来你也是WH大学的

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语言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语言写排序函数
标题路径:http://cdiso.cn/article/doecijj.html

其他资讯