zoukankan      html  css  js  c++  java
  • 数据结构与算法之选择排序

      每次 从待排序序列中选择出一个最大(或者最小)的记录添加到有序序列的后面即为选择排序。

      选择排序主要有:简单选择排序树形选择排序堆排序

    1、简单选择排序

     基本思路:重复进行n趟选择,第i趟通过n-i次记录的比较,在n-i+1个记录中选取最小(或最大)的记录与第i个记录进行交换。

    void selectSort(int arr[],int n){
        int outer,inner;
        int min;
        for(outer=1;outer<=n;outer++ ){
            min = outer;
            for(inner=outer;inner<=n;inner++)
              if(arr[inner]<arr[min])
                min = inner;
            if(min != outer){
                arr[0] = arr[min];
                arr[min] = arr[outer];
                arr[outer] = arr[0];
            }
    
        }
    }

    2、堆排序

     堆:(1) 堆是完全二叉树;

      (2) 小根堆:每个结点的值小于等于左右孩子结点的值;大根堆:每个结点的值大于等于左右孩子结点的值。

    堆排序:对于大根堆来说,堆顶记录即是整个序列的最大值。我们将待排序序列构造成一个堆,选出堆顶记录(最大值),然后把剩下的记录重新调整成堆,再选择出堆顶记录(次大值),依次下去,直到堆中只剩下一个记录。

    void shiftHeap(int arr[],int k,int m){
        int i = k;
        int j = i * 2;
        while(j <= m){
            if(j<m && arr[j]<arr[j+1]) j++;
            if(arr[i]>arr[j]) 
              break;
            else{
                arr[0] = arr[i];
                arr[i] = arr[j];
                i = j;
                j = 2 * i;
            }
        }
    }
    
    void heapSort(int arr[],int n){
        int index;
        for(index = n/2;index>=1;index--)
          shiftHeap(arr,index,n);
        for(index=1;index<n;index++){
            arr[0] = arr[1];
            arr[1] = arr[n-index+1];
            arr[n-index+1] = arr[0];
            shiftHeap(arr,1,n-index);
        }
    }

    3、总结

    简单选择排序:时间复杂度为o(n2),是不稳定排序。

    堆排序:时间复杂度为o(nlog2n),是不稳定排序。

    堆排序其实就是每次选择待排序序列中的最大值(或最小),它与简单选择排序的区别就是:简单选择排序是通过比较n-i+1个记录来选择最值,而堆排序是通过构造堆来选择最值。所以堆排序最重要的就是调整成堆的过程。

  • 相关阅读:
    mac下的docker的Docker.raw占用空间很大?
    python模块uuid产生唯一id
    缓存溢出Buffer Overflow
    (原创)攻击方式学习之(3)
    JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);
    Java框架安全
    Java Web:主动和被动方式检测安全的框架
    一.配置简单的嵌入式tomcat和jetty
    使用embeded tomcat进行嵌入式javaee开发-启动tomcat
    安全隐患,你对X-XSS-Protection头部字段理解可能有误
  • 原文地址:https://www.cnblogs.com/whc-uestc/p/4458405.html
Copyright © 2011-2022 走看看