标签:
比赛的时候有一道题,解题的时候我本来想用结构体数组存变量,然后对结构体数组中的其中一个量进行排序,但是当时不会自己编写对结构体的快排的cmp函数,只会写对一般数组进行排序的cmp,于是用的另一种方法,刚研究了下对结构体排序。
同学用c++写了一个cmp函数对那个结构体数组进行排序,还是用的sort,他说要看看stl的话对那个会理解一点,可是那个好多呀,于是我看了c语言的快排,希望把这个快排改编以下,以便对结构体排序
对普通数组排序的快排代码如下
参考处:http://blog.sina.com.cn/s/blog_70441c8e0100pxuh.html
void quiksort(int a[],int low,int high) { int i = low; int j = high; int temp = a[i]; if( low < high) { while(i < j) { while((a[j] >= temp) && (i < j)) { j--; } a[i] = a[j]; while((a[i] <= temp) && (i < j)) { i++; } a[j]= a[i]; } a[i] = temp; quiksort(a,low,i-1); quiksort(a,j+1,high); } else { return; } } void main() { int arry[5] = {23,1,21,4,19}; quiksort(arry,0,4); for(i=0;i<5;i++) { printf("%d ",arr[i]); } printf("\n"); }
下面是他的那道题的代码,等我能看懂的时候再看,题目出处
#include <algorithm> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; struct ss { int a; int b; }time[20020]; int cnt[20010]; int cmp(const ss &c,const ss &d) { return c.a<d.a; } int cmp2(const void *x, const void *y) { return *(int *)x - *(int *)y; } int main() { int t,n,l,i,cnt1,cnt2,ans,hr,mi,sec; scanf("%d",&t); while(t--) { memset(cnt,0,sizeof(cnt)); memset(time,0,sizeof(ss)); scanf("%d%d",&n,&l); for(i=1;i<=n;i++) { scanf("%d:%d:%d",&hr,&mi,&sec); time[i].a = hr*3600 + mi*60 + sec; time[i].b = i; } sort(time+1,time+n+1,cmp); cnt1 = 1; cnt2 = 2; ans = 1; cnt[0]=time[1].b; while(cnt2!=n+1) { if(time[cnt2].a-time[cnt1].a<l) { cnt2++; } else { cnt1 = cnt2++; cnt[ans++] = time[cnt1].b; } } qsort(cnt,ans,sizeof(cnt[0]),cmp2); printf("%d\n",ans); for(i=0;i<ans-1;i++) printf("%d ",cnt[i]); printf("%d\n",cnt[ans-1]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/rain-1/p/4764608.html