zoukankan      html  css  js  c++  java
  • 排序O(n)

    1.O(n)的排序(其实是快速排序的第一步):

    把一个数组的排序,前面是奇数,后面是偶数,时间复杂度O(n),空间复杂度O(1)

    #include <iostream>
    
    #define arraylength 10
    
    using namespace std;
    
    int array[arraylength]={1,3,3,3,5,11,15,13,17,15};
    
    void rearrangeArray(int array[],int n)//前面是奇数后面是偶数
    {
        int front=-1;
        int rear=n;
        while(front<rear)
        {
            while(front<n-1 && array[++front]%2!=0);
            while(rear>0 && array[--rear]%2==0);
            swap(array[front],array[rear]);
        }
        swap(array[front],array[rear]);
    
        for(int i=0;i<n;i++)
        cout<<array[i]<<" ";
    }
    
    int main()
    {
        rearrangeArray(array,arraylength);
        return 0;
    }
    

      2.还有一种O(n)  的排序,是在要排列的元素范围很小,比如都是在1--100之间,如人的年龄,,hash【100】,用来存每个数出现的次数,

  • 相关阅读:
    C语言面试题——寻找错误
    C语言的声明解释的在线工具——cdecl
    C语言面试题——指针运算
    const 指针与指向const的指针
    C语言复杂声明解释
    poj1248
    poj1750
    poj1484
    poj1853
    poj1575
  • 原文地址:https://www.cnblogs.com/shuguang/p/2802104.html
Copyright © 2011-2022 走看看