第八章学习小结

本章节学习了各种的排序方法,它们的性能比较如下:

 

 1.直接插入排序

直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。

void InsertSort(int R[],int n)
{
    int i,j,temp;
    for(i=1;i<n;i++)    //插入排序共需要插入n个元素,但此处我们默认序列中存在R[0]这个元素,故之后需进行n-1次插入操作
    {
        temp=R[i];
        j=i-1;
        while(j>=0&&temp<R[j])    //比插入元素大的元素进行后移操作
        {
            R[j+1]=R[j];
            --j;
        }
        R[j+1]=temp;    //插入要插入的元素
    }
}

 

2.希尔排序

希尔排序的算法思想:将待排序数组按照步长进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。

3.简单选择排序

        (1)从待排序序列中,找到关键字最小的元素;

        (2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;

        (3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
            因此我们可以发现,简单选择排序也是通过两层循环实现。
第一层循环:依次遍历序列当中的每一个元素
第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。

4.堆排序

堆:本质是一种数组对象。特别重要的一点性质:<b>任意的叶子节点小于(或大于)它所有的父节点</b>。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,

小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。

步骤:(1)首先将序列构建称为大顶堆;(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值)

           (2)取出当前大顶堆的根节点,将其与序列末尾元素进行交换;

           (3)对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质;

5.冒泡排序

(1)将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素;

(2)对序列当中剩下的n-1个元素再次执行步骤1。

(3)对于长度为n的序列,一共需要执行n-1轮比较

6.快速排序

算法思想:快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

7.归并排序

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。

算法思想:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。

8.基数排序

通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。

 

posted @ 2020-07-12 21:00  软工1902龚俊杰  阅读(95)  评论(0编辑  收藏  举报