算法学习 交叉排序
2015-09-14 10:41
567 查看
/* 对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放, 且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。 */ #include <cstdio> #include <cstdlib> #include <cstring> int comp(const void *p, const void *q) { return (*(int *)p - *(int *)q); } void sorts(int a[],int n) { int odd=0,even=0; int even_num=0,odd_num=0; int *r =a; int even_arr[100]={0}; int odd_arr[100]={0}; int *p_even = even_arr; int *p_odd = odd_arr; int *p = even_arr; int *q = odd_arr; for(int i=0;i<n;i++) { if(a[i]%2 == 0)//偶数 { even_num++; *p_even++ = a[i]; } else//奇数 { odd_num++; *p_odd++ = a[i]; } } qsort(even_arr,even_num,sizeof(even_arr[0]),comp); //偶数从大到小排列 qsort(odd_arr,odd_num,sizeof(odd_arr[0]),comp); //奇数从小到大排列 while(odd<odd_num && even<even_num) { *r++ = *q++; odd++; *r++ = *p++; even++; } while(even!=even_num&&odd!=odd_num) { if(even<even_num) { *r++ = *p++; even++; } while(odd<odd_num) { *r++ = *q++; odd++; } } } int main(/*int argc, char **argv*/) { int i; int a[]={2,0,3,9,4,10,7,11,15,22,66,31,21,87,99,101,177}; int n=sizeof(a)/sizeof(a[0]); sorts(a,n); for(i=0;i<n;i++) printf("%d ",a[i]); return 0; }
相关文章推荐
- 线程的状态
- MySQL错误Another MySQL daemon already running with the same unix socket.v
- 运维常用shell
- 补提交卡
- 【C++】实现单链表
- SpringMVC中的@ResponseBody
- MyBatis学习总结(五)——实现关联表查询
- 果蝇优化算法
- 信息安全(一)
- 黑马程序员---Java基础---java语言基本组成
- 存储过程返回布尔值以及C#相关处理
- 在Qt中使用sleep
- VS.NET2010水晶报表安装部署
- 壹、js的概述
- GCD介绍
- linq简介
- 负载均衡LVS集群详解
- IOS中将照片压缩至指定大小
- java字符串与字符
- Maven常用命令