zoukankan      html  css  js  c++  java
  • 面试编程题(排序)

    排序:快排、堆排序

    /*直接插入排序
    *设置哨兵[0]*/
    void InsertSort(int data[],int length)
    {
        for(int i = 2; i <= length; i++)
        {
            if(data[i] < data[i-1])
            {
                data[0] = data[i];
                data[i] = data[i-1];
                int j;
                for(j= i-2; data[0] < data[j]; j--)
                    data[j+1] = data[j];
                data[j+1] = data[0];
            }
    
        }
    }
    /*直接插入排序
    *不设置哨兵*/
    void InsertSort2(int data[],int length)
    {
        for(int i= 1; i<length; i++)
        {
            if(data[i]<data[i-1])
            {
                int tmp = data[i];
                int j;
                for(j=i-1; j>=0 && data[j] > tmp;j--)
                    data[j+1] = data[j];
                data[j+1] = tmp;
            }
        }
    }
    /*希尔排序  用插入实现*/
    void ShellSort(int data[],int n)
    {
        for(int d = n/2; d >=1; d /=2 ) //步长
        {
            for(int i = d; i<n; i++)
            {
                if(data[i] < data[i-d])
                {
                    int tmp = data[i];
                    int j;
                    for(j = i-d; j>=0 && data[j] > tmp; j-=d)
                        data[j+d] = data[j];
                    data[j+d] = tmp;
                }
            }
        }
    }
    /*希尔排序  用交换实现*/
    void ShellSort2(int data[],int n)
    {
        for(int d = n/2; d >=1; d /=2 ) //步长
        {
            for(int i = d; i<n; i++)
            {
                for(int j = i-d; j>=0 && data[j] > data[j+d]; j-=d)
                    swap(data[j],data[j+d]);
            }
        }
    }
    
    /*冒泡排序*/
    void bubble_sort(int data[], int n)
    {
        for(int i = 0;i<n;i++)
        {
            for(int j = 0; j < n - i-1 ; ++j)
            {
                if(data[j+1] < data[j])
                    swap(data[j],data[j+1]);
            }
        }
    }
    /*Qsort*/
    int Partition(int data[],int len,int low,int high)
    {
        int pivotkey = data[low];
        while(low < high)
        {
            while(low<high && data[high] >= pivotkey) --high;
            swap(data[low],data[high]);
            while(low<high &&data[low] <=pivotkey) ++low;
            swap(data[low],data[high]);
        }
        return low;
    }
    
    int Partition2(int data[],int len,int low,int high)
    {
        int tmp = data[low];
        int pivotkey = data[low];
        while(low<high)
        {
            while(low < high && data[high] >= pivotkey) --high;
            data[low] = data[high];
            while(low < high && data[low] <= pivotkey) ++low;
            data[high] = data[low];
        }
        data[low] = tmp;
        return low;
    }
    
    void Qsort(int data[],int len,int low,int high)
    {
        if(low < high)
        {
            int pivotloc = Partition2(data,len,low,high);
            Qsort(data,len,low,pivotloc-1);
            Qsort(data,len,pivotloc+1,high);
        }
    }
    
    /*堆排序*/
    void HeapAdjust(int data[],int start,int end)
    {
        int tmp = data[start];
        for(int j=2*start+1;j<=end;j=2*j+1)
        {
            if(j<end && data[j]<data[j+1]) ++j;
            if(tmp > data[j]) break;
            data[start] = data[j];
            start = j;
        }
        data[start]= tmp;
    }
    void HeapSort(int data[],int len)
    {
        //建堆
        for(int i=len/2-1;i>=0;i--)  //0 开始 最后一个非终端节点  为 n/2  向下取整 -1
                                    //1开始  最后一个非终端节点   为n/2  向下取整
            HeapAdjust(data,i,len-1);
        for(int i=len-1;i>0;i--)
        {
            swap(data[0],data[i]);
            HeapAdjust(data,0,i-1);
        }
    }

    归并排序

     各排序算法比较   稳定  时间复杂度  空间复杂度

  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/hlongch/p/5714923.html
Copyright © 2011-2022 走看看