zoukankan      html  css  js  c++  java
  • PKU 1007

    题名:DNA排序

    题意:给定字符串长度、个数,计算每个字符串的逆序数,然后从大到小排列,有兴趣的可以去看下原题。

    计算字符串逆序数,然后排序,这里使用了快速排序算法,string释放的时候竟然有问题,直接字符数组吧。

    // 1007.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <algorithm>
    using namespace std;
    class data
    {
    public:
        char s[51];
        int c;
    };
    int partion(data a[],int p,int r){
        int x = a[r].c;     //通常,拿最后一个值,作为预期的中间值
        int middle = p;   //记录“较小的一段数据”的最大下标。通常这个值在p和r的中间,故起名middle
        data *temp=new data;
        for (int j = p ; j < r ; j++){
            if (a[j].c < x){
                
                memcpy(temp,&a[middle],sizeof(data));
                //int temp  = a[middle].c;
                memcpy(&a[middle],&a[j],sizeof(data));
                //a[middle] = a[j];
                memcpy(&a[j],temp,sizeof(data));
                //a[j] = temp;
                middle++;
            }
        }
        //int temp = a[r];
        memcpy(temp,&a[r],sizeof(data));
        //a[r]     = a[middle];
        memcpy(&a[r],&a[middle],sizeof(data));
        //a[middle] = temp;
        memcpy(&a[middle],temp,sizeof(data));
        delete temp;
        return middle;
    }
    
    
    void QuickSort(data a[],int p,int r){
        if (p<r){
            int q=partion(a,p,r);
            QuickSort(a,p,q-1);
            QuickSort(a,q+1,r);
        }
    }
    
    int main(int argc, char* argv[])
    {
        int slen=0,snum=0;
        cin>>slen>>snum;
        int count=0;
        char temp[200]={0};
    
        data *d1=new data[snum];
        while (count<snum)
        {
            cin>>temp;
            strcpy(d1[count].s,temp);        
            int bigTimes=0;
            for (int i=0;i<strlen(temp)-1;i++)//计算大的次数
            {
                for (int j=i+1;j<strlen(temp);j++)
                {
                    if(temp[i]>temp[j])
                        bigTimes++;
    
                }
            }
            d1[count].c=bigTimes;
            count++;
        }
        QuickSort(d1,0,count-1);
        for (int i=0;i<count;i++)
        {
            //strcpy(temp,d1[i].s.c_str());
            cout<<d1[i].s<<endl;
        }
        delete []d1;
        return 0;
    }
  • 相关阅读:
    G a+b+c+d=?
    H Kuangyeye and hamburgers
    python 实现加法
    高精度板子
    angular项目一
    angular大牛的博客
    autocomplete
    angular的 表单
    快捷方式控制台调试each这种方法的时候怎么停
    自己练习的一些应该熟记的代码
  • 原文地址:https://www.cnblogs.com/alphaxz/p/3482467.html
Copyright © 2011-2022 走看看