时间复杂度

博客园 首页 新随笔 联系 订阅 管理

选择排序:每一趟(例如第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)。

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

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

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

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

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

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

posted on 2019-04-01 21:02  时间复杂度  阅读(213)  评论(0编辑  收藏  举报