zoukankan      html  css  js  c++  java
  • 第八章学习小结

    第八章主要学习排序的相关算法。

    通过这章,了解到有很多比较好的排序方式,这章也比较强调对算法存储结构的理解,对算法的编写要求不是太大。

    1、从插入排序来说

      主要讲了直接插入排序和折半插入排序,希尔排序的话也了解了一下。插入排序的关键是“比较”和“后移”。比较就是对数的比较,基于要求进行升序或降序排列。后移就是在比较成功后预留位置去插入。

      算法的特点:它是稳定的排序,但是当数据量比较大的时候,算法的时间复杂度过高。

    2、对交换排序来说

      主要介绍了冒泡排序和快速排序。其中这里的重点是快速排序。

      冒泡排序简单来说就是每次确定一个元素的最终位置,比如说按升序排序的话,每次循环结束都将最大的元素推到最后。

      **快速排序:快排是非常重要的,所以我也自己去研究了下算法。

    int Partition(int *a,int low,int high){
        a[0]=a[low];/*更新位置*/
        while(low<high){
            /*从末端开始查找*/
            while(low<high&&a[high]>=a[0]){
                high--;
            }
            a[low]=a[high];
            
            while(low<high&&a[low]<=a[0]){
                low++;
            }
            a[high]=a[low];
        }
        a[low]=a[0];/*该元素的最终位置*/
        return low;
    }
    View Code
    void QSort(int *a,int low,int high){
        if(low<high){
            int pos=Partition(a,low,high);/*获得中枢位置*/
            QSort(a,low,pos-1);
            QSort(a,pos+1,high);    
        }
    }
    View Code

      快排在最坏的情况下会退化为O(n²)的时间复杂度(原序列有序的时候)

     

    3、选择排序

      简单选择排序其实在上学期学过了,其实就是比较+交换的过程,算法的话也比较熟悉了。

      这一小节的重点是堆排序。堆排序的引出是为了解决简单选择排序时间复杂度比较大的问题。

      堆排序包括建初堆和调整堆两大步骤。其中堆的概念需要明白。最大堆是指根节点的值不小于其左右结点,最小堆是指根节点的值不大于其左右结点。

    4、最后就是归并排序了

      归并排序是将多个有序的序列合并到一起。在前面的章节中也有提及到这个概念。归并排序是稳定的排序。归并排序的主要作用在于解决外排序数据量超过内存大小的问题,它可以分块进行分块记录。

     

  • 相关阅读:
    收集一些网络检测和分析工具
    编程经验分享(转自银总的建议)
    代码着色和windows live writer真好
    pku1063 Flip and Shift严格证明
    So Many Skirt
    一些网址
    c++编写的算24程序
    一道简单的回溯搜索题
    windows程序设计第二章Unicode简介
    字符,字节和编码
  • 原文地址:https://www.cnblogs.com/jintao1990/p/13290334.html
Copyright © 2011-2022 走看看