oj上一道数组排序类习题的延伸

CSDN猿友们😄,大家好。我是一名初出茅庐的电气类的学生,对程序和编程很有兴趣,总在CSDN求知,也希望有所反馈,希望与大家共成长。
题目如下
标题:	排序2,类别:数组,时间限制	2S,内存限制	1000Kb,问题描述:	给定N个不同的整数,要求对这N个整数按如下规则排序并输出。规则一:所有的偶数排在奇数前面。规则二:在规则一的前提下按照从大到小的顺序排序。输入说明	数据由两行构成,第一行为整数n(n<=100),表示待排序整数的数量。第二行是n个整数,每个整数的取值区间都为[-32768~32767],整数之间以空格间隔。输出说明	在一行输出排好序的整数,整数之间以空格间隔。输入样例	
5 
1 2 3 4 5
输出样例	
4 2 5 3 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){	
int *p; 	
int m,i,j,tank;	
scanf("%d",&m);	
getchar();
p=(int*)malloc(sizeof(int)*m);	memset(p,0,m);	
for(i=0;i<m;i++){		scanf("%d",&p[i]) ;
}	
for(i=0;i<m-1;i++)		
  for(j=0;j<m-i-1;j++){			       if((p[j]%2!=0&&p[j+1]%2==0)||((p[j]+p[j+1])%2==0&&p[j]<p[j+1])){				     tank=p[j];				
p[j]=p[j+1];				p[j+1]=tank;			}		}	for(i=0;i<m;i++)		
printf("%d ",p[i]);	
return 0;
}

下面,我来如实呈现一下我的思路,希望大家能包容。
首先,这是一个排序类型的题目,那么一个比较常规的方式就是冒泡算法排序。
不知道大家有没有玩过三阶异形魔方,其实它的思路与三阶的普通魔方如出一辙。其实,你只需要思路上有一个小小的转化,你把每一种立体的厚度当成不同的颜色就可以。
同理,你只需要对冒泡算法进行一个改进,原来的标准是单一的大小排序,而现在你需要再考虑单数与双数,你只需要重新规定一个准则来排序。
然后,是我想说的关键,你应该对冒泡算法本质有一个理解,其实就是两个字,交换。什么时候交换,什么时候不交换,这就是你的准则所表述的。本题中,一,双数与单数相遇,双数在前,第二,两个单数或两个双数相遇,大的在前。这就是我的if条件里所表示的内涵,如此标准下冒泡排序,就能得到我们想要的结果。
理解冒泡本质,很重要。
完全是个人拙见,只是想表达与分享。谢谢各位。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值