2012年5月26日
摘要: 快排很好用,但是不是万能的,有时用很容易超时如果要输入排序的数列中是有范围规定的(范围在int数组可接受之内):只要定义一个数组,将他们初始化为0,之后将他们输入后当作数组的下标,将该数组加1;然后直接从下标为0的数开始找到第一个1的数就是最小的,要是想要前几个最小的,就要找几个1(此方法适合无负数的)只要定义一个数组,将他们初始化为0,之后将他们输入后加上一个最大范围的常数当作数组的下标,将该数组加1;然后直接从下标为0的数开始找到第一个1的数就是最小的,要是想要前几个最小的,就要找几个1(适合有负数的) 阅读全文
posted @ 2012-05-26 16:18 xinmenghuairi 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 这个题用快排就超时了,由于他们的数是有范围的,所以只要将他们的数作为数组下标让他们加上一(先要将数组初始化为0),即可自动排序了,只要从下标为0开始找到n/2个数就可以了。代码:#include<iostream>using namespace std;int a,b,m,x0; int c[40001];int main(){ int x,n,s; while(scanf("%d%d%d%d%d",&n,&a,&x0,&b,&m)!=EOF) { s=0; memset(c,0,sizeof(c)); if(n==0) 阅读全文
posted @ 2012-05-26 16:08 xinmenghuairi 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 先判断起始是否为5,要是的话就将其去掉,之后再开始找下面的数转换后存入数组中,直到再次碰到5,在找不是我的数开始转换存入下一个数组中,如此循环,最后排序。#include"iostream"#include"string.h"#include"stdlib.h"using namespace std;char a[1010];int b[1000];int n,c,i;int cmp(const void*q,const void*p){ return *(int*)q-*(int*)p;}int main(){ while(cin& 阅读全文
posted @ 2012-05-26 10:12 xinmenghuairi 阅读(385) 评论(0) 推荐(0) 编辑