码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2015-08-27 22:29:50      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

比赛的时候有一道题,解题的时候我本来想用结构体数组存变量,然后对结构体数组中的其中一个量进行排序,但是当时不会自己编写对结构体的快排的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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!