网站建设资讯

NEWS

网站建设资讯

包含c语言cmp函数负数降序的词条

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语言如何对大量数字进行排序?

如果是C语言的话只能手写堆排序、归并排序或者快速排序等等

如果是用C++的话可以看下面:

10W量级直接考虑使用STL的sort函数,用法自行百度或者参见

sort函数默认是升序排序,要降序排序可以传cmp函数过去或者sort完了reverse

1000W量级考虑使用计数排序或者基数排序,这两种排序对被排序数字的大小有一定限制

如果是1000W量级的实数排序,或者数字可能很大的话,那么还是回到之前说的sort

STL里提供了很多O(nlogn)级别的排序函数,比如sort、qsort、stable_sort

另外还有简化归并排序代码用的merge函数等等

以上所有函数均能在cplusplus.com查到详细用法

c语言入门问题,求解答

bool cmp(const int a,const int b)

{

if(a  b)return false;

else return true;

}

templateclass T

void Swap(T t1,T t2)

{

T tmp;

tmp = t1,t1 = t2,t2=tmp;

}

void bubblesort(int arr[],int n)

{

int i,j;

bool flag = false;

if(NULL == arr || n = 0)return;

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

{

flag = false;

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

{

if(cmp(arr[j],arr[j+1]))

{

Swap(arr[j],arr[j+1]);

flag = true;

}

}

if(!flag)

{

break;

}

}

}

void insertsort(int arr[],int n)

{

int i,j;

int insert;

if(arr == NULL || n = 0)return;

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

{

insert = arr[i];

arr[0] = arr[i];

for(j = i;cmp(arr[j-1],insert);j --)

{

arr[j] = arr[j-1];

}

arr[j] = insert;

}

}

void selectsort(int arr[],int n)

{

int i,j;

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

{

int maxindex = 0;

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

{

if(arr[maxindex]  arr[j])

{

maxindex = j;

}

}

Swap(arr[maxindex],arr[n-1-i]);

}

}

int partition(int arr[],int s,int e)

{

int pov = arr[s];

if(arr == NULL || s  e)return -1;

else 

{

while(s  e)

{

while(s  e  cmp(arr[e],pov)) e--;

arr[s] = arr[e];

while(s  e  cmp(pov,arr[s])) s++;

arr[e] = arr[s];

}

arr[s] = pov;

return s;

}

}

void Qsort(int arr[],int s,int e)

{

if(arr == NULL || s  e)return;

int pov = partition(arr,s,e);

Qsort(arr,s,pov - 1);

Qsort(arr,pov + 1,e);

}

int main()

{

int arr[] = {-1,9,5,1,2,3,4,8,77,6,88,100,-8,11,12,13,10,89,5689,-9,777,999};

typedef int sizet;

sizet size = 21;

int algorithm = 3;

switch(algorithm)

{

case 0:

bubblesort(arr,size);

break;

case 1:

insertsort(arr,size);

break;

case 2:

selectsort(arr,size+1);

break;

case 3:

Qsort(arr,0,size);

break;

}

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

if(i  size)cout  arr[i]  " , ";

else cout  arr[i]  endl;

return 0;

}

根据修改cmp函数可以实现升序和降序

c语言中合并两个降序数组,使合并后的数组仍然保持降序排列

#includestdio.h

#includestdlib.h

#define N 100

int cmp(const void*a,const void*b)

{//快速排序比较函数

int *x=(int*)a;

int *y=(int*)b;

return *y-*x;

}

int main()

{

int a[N]={9,7,5,3,1};

int b[N]={8,6,4,2,0};

int sum[2*N]={0};//合并数组

int k=0;//合并数组元素个数的计数

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

{

sum[k++]=a[i];//a数组元素赋值给sum数组

}

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

{

sum[k++]=b[i];//b数组元素赋值给sum数组

}

qsort(sum,10,sizeof(sum[0]),cmp);//降序排序

for(int i=0;ik;i++)//输出

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

return 0;

}

关于C语言中数组升降序的问题

bool Cmp(int a, int b, int flag) {

if(flag) return a b;

return a b;

}

void Swap(int a, int b) {

int tmp = a;

a = b;

b = tmp;

}

void BubbleSort(int a[], int left, int right, int flag) {//flag为1时表示升序排序,为0时表示降序排序

int i, j, tmp;

bool exchanged;

for(i = left; i right; i++) {

exchanged = false;

for(j = right; j i; j--)

if(Cmp(a[j], a[j + 1], flag))

Swap(a[j], a[j + 1]);

exchanged = true;

}

if(exchanged == false) break;

}

}

void main( ) {

int n, a[100];

cin n;

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

cin a[i];

BubbleSort(a, 0, n / 2 - 1, 1); //前半部分升序排序

BubbleSort(a, n / 2 + n % 2, n - 1, 0); //后半部分降序排序

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

cout a[i] " ";

}

“我想要的是更好的算法!”你的“更好”指的是什么意思?性能更好?可读性更好?还是更容易实现?对于性能更好,你的题目里已经限定了条件,“用起泡法对数组a...... ”,所以,对性能更好,你问的问题是前后冲突,你得修改问题了。对于可读性,这就看程序是否容易理解。


网站栏目:包含c语言cmp函数负数降序的词条
网页链接:http://cdweb.net/article/hjspcj.html