zoukankan      html  css  js  c++  java
  • 北航复试机试题

    题目1167:数组排序

    数据量小得可怜,完全可以最用朴素的方法。

    本代码:快速排序,二分查找输出。

    #include <stdio.h>
    typedef struct node
    {
        int val,idx;
    }node;
    node c[10000];
    int d[10000];
    void swap(node *a,node *b)
    {
        int t;
        t = a->val;
        a->val = b->val;
        b->val = t;
    }
    void quick(int left,int right)
    {
        int l,r;
        l = left +1;
        r = right;
        if(left >=right)return;
        int key = c[left].val;
        while(1)
        {
            while(c[r].val> key)r--;
            while(c[l].val<key&&l<r)l++;
            if(l>=r)break;
            swap(&c[l],&c[r]);
            if(c[l].val == c[left].val)r--;
            else l++;
        }
        swap(&c[left],&c[r]);
        if(left<l-1)quick(left, l-1);
        if(r+1<right)quick(r+1, right);
    }
    int binary0(int l,int r,int key)
    {
        int mid = (l+r)/2;
        if(c[mid].val == key)return c[mid].idx;
        if(c[mid].val>key)return binary0(l, mid-1, key);
        else return binary0(mid+1, r, key);
        
    }
    int main(int argc, const char * argv[])
    {
        int n,i;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=0;i<n;i++)
            {
                scanf("%d",&c[i].val);
                d[i] = c[i].val;
                //c[i].idx = i;
            }
            quick(0, n-1);
            c[0].idx = 1;
            for (i=1; i<n; i++) {
                if(c[i].val!=c[i-1].val){c[i].idx = c[i-1].idx+1;}
                else c[i].idx = c[i-1].idx;
            }
            for (i=0; i<n; i++) {
                if(i!=0)printf(" ");
                printf("%d",binary0(0, n-1, d[i]));
            }
            printf("
    ");
           
        }
    }
  • 相关阅读:
    函数的扩展
    数组的扩展
    event(1)
    面试
    iframes
    浏览器CSS兼容
    BFC
    简单的一个轮播效果
    asp.net identity 2.2.0 在WebForm下的角色启用和基本使用(二)
    我的web框架设计
  • 原文地址:https://www.cnblogs.com/sook/p/3166005.html
Copyright © 2011-2022 走看看