zoukankan      html  css  js  c++  java
  • C语言排序算法学习笔记——选择类排序

    选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了。

    简单选择排序:其实现为

    void SelectSort(ElemType A[],int n){
        for(i=0;i<n-1;i++){                             
            min=i;                                    //min存的是当前最小元素所在下标,初值设为第i个 
            for(j=i+1;j<n;j++)                        //从第i个元素往后找,一直找到最后一个元素 
                if(A[j]<A[min]) min=j;                //如果这个值更小,更新min的值 
            if(min!=i){                               //如果第i个元素不是剩下元素最小的,则和最小的进行交换 
                ElemType temp=A[i];
                A[i]=A[min];
                A[min]=temp;
            }
        }
    } 

    空间复杂度:O(1)。

    时间复杂度:O(n2)。

    稳定性:不稳定,交换部分会打破相对顺序。

    堆:是一颗完全二叉树,而且满足任何一个非叶结点的值都不大于(或不小于)其左右孩子结点的值。

    ①如果是每一个结点的值都不小于它的左右孩子结点的值,则称其为大顶堆;

    ②如果是每一个结点的值都不大于它的左右孩子结点的值,则称其为小顶堆。

    堆排序:我们知道对于一个堆来说,它的根结点是整个堆中所有结点的值的最大值(大顶堆)或者最小值(小顶堆)。所以堆排序的思想就是每次将无序序列调整成一个堆,然后从堆中选择堆顶元素的值,这个值加入有序序列,无序序列减少一个,再反复调节无序序列,直到所有的关键字都加入到有序序列。

    堆排序的实现以后更新,挖个坑

  • 相关阅读:
    windows 启动关闭Oracle监听和服务
    自定义 Git
    c++ cmakelist 详解
    vue自定义错误界面
    C++ Web 编程
    前端如何将H5页面打包成本地app?
    django教程
    部署 Django
    Django 国际化和本地化
    Django与CSRF 、AJAX
  • 原文地址:https://www.cnblogs.com/jackliu-timecomplexity/p/10638915.html
Copyright © 2011-2022 走看看