花样排序
来源:互联网 发布:劳丽诗淘宝店生意如何 编辑:程序博客网 时间:2024/04/24 04:17
看到标题,不要激动,我不是要讲一种新的排序算法,话说我现在也还不够能力去发现(发明?)一种新的算法,我只是要说出一种新的排序问题,而已。。。
问题描述如下:
请编程实现将输入自然数组中的数字按要求处理并放入到输出数组中
1. 偶数按从大到小排序
2. 奇数按从小到大排序
3. 将奇数和偶数按顺序间插后放入输出数组,奇数在前,偶数在后。奇数和偶数数目不等,奇数和偶数数目不等时,多出的数字无法间插的就按顺序放置。
比如:输入数组input[]={1,12,32,15,2,67,8,9,12,3,3,5}
输出数组output[]={1,32,3,12,3,12,5,8,9,2,15,67}
实现函数:
void sort_cross(int a[],const int n,int b[]){ int cmp(const void *x,const void *y); int i = 0,j = 0,k = 0; int num_e = 0,num_o = 0;assert(NULL != a && NULL != b); qsort(a,n,sizeof(int),cmp); for(i = 0;i < n;++i) { if(a[i] & 1) { ++num_o; } } num_e = n - num_o; if(num_e >= num_o) { for(i = 0,j = 0,k = n - 1;i < n;++i) { if(a[i] & 1) { b[j] = a[i];j += 2; } else { if(k < 2*num_o - 1) {--k;b[k] = a[i]; }else{b[k] = a[i];}--k; } } } else { for(i = 0,j = 0,k = 2*num_e - 1;i < n;++i) { if(a[i] & 1) { if(j < 2*num_e) { b[j] = a[i]; j += 2; } else { b[j] = a[i]; ++j; } } else { b[k] = a[i]; k -= 2; } } }}int cmp(const void *x,const void *y){ return *(int *)x - *(int *)y;}
测试程序:
#include <stdio.h>#include <stdlib.h>#include <assert.h>#define N 12int main(int argc,char **argv){ void sort_cross(int a[],const int n,int b[]); int i = 0;int a[N] = {0},b[N] = {0}; printf("Please enter the array to be sorted:\n"); for(i = 0;i < N;++i) { scanf("%d",&a[i]); printf("\t"); } printf("\n"); sort_cross(a,N,b); printf("The sorted array is:\n"); for(i = 0;i < N;++i) { printf("%d\t",b[i]); } printf("\n");system("pause"); return 0;}
排序,不是难点,不管效率不顾消耗的话,来个最简单的冒泡法,不怕冒不出来他们的顺序,但是要实现间插,还要一个升序一个降序,貌似很简单的样子,但是,你晓得我花了好久才调出来正确的程序吗?算了,不说了,怕被高人鄙视。如果你不信我搞这个程序有这么艰难,不妨现在就着手写一个,怎样?
间插的过程,先遍历一遍,得出奇数和偶数的个数,然后依据它们不同的大小关系,分别执行if和else的语句块,所以对数组读取了两遍。第一遍就是为了得出奇偶数个数,有点浪费时间了吗?想想还有木有只遍历一遍的方法喃。
- 花样排序
- php三种方式对二维数组进行花样排序
- Console 花样
- 花样ProgressBar
- 花样ProgressBar
- 花样LED
- 花样灯
- 花样灯
- 花样灯
- 花样灯
- 花样灯
- 花样人生(转载)
- 花样贝塞尔曲线(C#)
- 喜欢《花样少年少女》
- 4.花样流水灯
- 花样流水灯
- 花样作死记录文~
- 花样swap函数
- 编程之美——2.19 区间重合判断
- 如何更有效使用 Rational AppScan 扫描大型网站
- Oracle角色
- ios点点滴滴
- 大数求模lightoj1214
- 花样排序
- 如何将xib文件再ipad和iphone之间互相转换
- [一分钟先生]夏远志:转型从思维习惯的转变开始
- sizeof()计算一个类的对象大小和sizeof(string)的问题
- 【转】PNG图像文件介绍
- Oracle权限
- 题目
- 指导目标
- 2012.9.15