数据结构中排序、查找、最小生成树算法总结

1.排序算法
定义:把一个无序元素序列按照元素的关键字递增或递减排列为有序的序列
在这里插入图片描述
一、插入排序
1)直接插入排序:
基本思想:假设前i-1个元素已经有序,将第i个元素的关键字与前i-1个元素的关键
字进行比较,找到合适的位置,将第i个元素插入。按照类似的方法,将剩下的元素依次插入到已经有序的序列中,完成插入排序。

例如:对序列(45,23,56,12,97,76,29,68)进行直接插入排序。
在这里插入图片描述
在这里插入图片描述
2)希尔排序(缩小增量排序)
基本思想:通过将待排序的元素分为若干个子序列,利用直接插入排序思想对子序列进行排序。然后将该子序列缩小,接着对子序列进行直接插入排序。按照这种思想,直到所有元素都按照关键字有序排列。

例如:利用希尔排序的算法思想,对序列(56,22,67,32,59,12,89,26,48,37)进行排序。
在这里插入图片描述
在这里插入图片描述
二、选择排序:
1)简单选择排序
基本思想:假设待排序的元素序列有n个,第一趟排序经过n-1次比较,从n个元素序列中选择关键字最小的元素,将其放在第一个位置。第二趟排序从剩余的n-1个元素中,经过n-2次比较,选择关键字最小的元素,将其放在第二个位置。依次类推,直到没有待比较的元素,简单选择排序算法结束。

例如:给定一组元素序列,其元素的关键字为(56,22,67,32,59,12,89,26),简单选择排序的过程如下。
在这里插入图片描述
在这里插入图片描述
2)堆排序
基本思想:主要利用二叉树的树形结构。Step 1:将长度为n的待排序列进行堆有序化构造成一个大顶堆;Step 2:将根节点与尾节点交换并输出此时的尾节点;Step 3:将剩余的n-1个节点重新进行堆有序化;Step 4:重复Step 2、Step 3直至构造成一个有序序列。

例如:给定一个整形数组a[]={16,7,3,20,17,8},对其进行堆排序(大根堆)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考:https://jingyan.baidu.com/article/5225f26b057d5de6fa0908f3.html

三、交换排序
1)冒泡排序:
基本思想:从第一个元素开始,依次比较相邻两个元素,若两个元素逆序,则进行交换。假设元素序列中有n个待比较的元素,第一趟排序结束,最大的元素移到第n个位置。在第二趟排序结束,就会将关键字次大的元素移动到第n-1个位置。依次类推,经过n-1趟排序后,元素序列构成一个有序的序列。

例如:对序列(56,22,67,32,59,12,89,26,48,37)进行冒泡排序。
在这里插入图片描述
在这里插入图片描述
2)快速排序
基本思想:设要排序的数组A[0]……A[N-1],任选一个数据(通常选数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序;然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,以此达到整个序列有序。

例如:对序列(37,19,43,22,22,89,26,92)快速排序。
在这里插入图片描述
在这里插入图片描述
三、归并排序
基本思想:将两个或两个以上的有序序列组合,使其成为一个有序序列。

例如:对序列 (37,19,43,22,57,89,26,92)进行2路归并排序。
在这里插入图片描述
在这里插入图片描述
四、基数排序
基本思想:将整数按位数切割成不同的数字,然后按每个位数分别比较。将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

例如:对序列(53, 3, 542, 748, 14, 214, 154, 63, 616)进行基数排。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hellowuxia/article/details/82769239
今日推荐