查找元素索引位置
基本查找
根据数组元素找出该元素第一次在数组中出现的索引
案例中查找元素2的索引,索引为7;
运行后返回结果正确:
二分查找
使用二分查找查找出该元素在数组中第一次出现的索引
前提:该数组的元素必须有序
思想:每一次都查找中间的元素,比较大小就能减少一半的元素

具体代码实现:
案例中查找元素为40,索引为3;
运行后返回结果正确:

八大排序方法
冒泡排序
原理:数组元素两两比较,交换位置,大元素往后放,经过一轮比较后,最大的元素,就会被排到数组的最后
图解:

代码部分:
先进行第一轮排序,看看效果:

下面进行多轮排序:
代码部分
笨方法:多次for循环,比较繁琐,重复循环,语句没营养,看看就好,主要是得能想到,为嵌套循环做准备

使用嵌套循环(语句精简,没有废话):

冒泡排序就介绍到这里~
选择排序
原理:从0索引处开始,依次和后面的元素进行比较,小的元素往前放,经过一轮比较后,最小的元素就会出现在最小索引处
图解:

代码部分:多轮排序(优化前)

优化代码:嵌套循环:


选择排序就介绍到这里~
直接插入排序
原理:从1索引处开始,将后面的元素与前一位比,小于前一位则交换,再与前一位比,如果小于再交换,如此循环,插入之前的有序列表中使之仍保持有序

(方法1):代码实现:

(方法2)代码实现:
由于很多地方需要使用前后元素值交换,因此封装成一个方法:代码如下:
使用自己封装的方法:
直接插入排序就介绍到这里~
希尔排序
希尔排序又称缩小增量排序
基本思想:先将原表按增量ht分组;每个子文件按照直接插入法排序。同样,用下一个增量ht/2将文件再分为自问见,在直接插入法排序。直到ht=1时整个文件排好序。
关键:选择合适的增量。
希尔排序算法9-3:可以通过三重循环来实现。
图示:

将数组按步长为5的间隔两两分为一组,每组两个元素进行比较大小,小的放置于前面,大的放置于后面;
由此排序一次后,大致可以将整个数组中较小的元素放在前面,较大的放在后面。
下面数组长度为8,第一次间隔取4,第二次间隔取2,第三次间隔取1,具体实现见下图:

代码实现(使用克努特序列,合理选择增量):
希尔排序就介绍到这里~
快速排序
原理:分治法:比大小,再分区
从数组中取出一个数,作为基准数
分区:将比这个数大或等于的书全放到他的右边,小于他的数全放到他的左边。
再对左右区间重复第二步,直到各区间只有一个数。
实现思路
将基准数挖出形成第一个坑
由后向前找比它小的数,找到后挖出此数填到前一个坑中
由前向后找比它大或等于的数,找到后也挖出此数填到前一个坑中。
再重复执行上述两步骤

代码实现:
快速排序就介绍到这里~

归并排序
归并排序(Merge Sort)就是利用归并的思想实现排序的方法
原理:假设初始序列有N个记录,则可以看成是N个有序的子序列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的有序子序列,再两两归并。。。如此重复,直至得到一个长度为N的有序序列为止,这种排序方法称为2路归并排序

代码实现:
归并排序就介绍到这里~
基数排序
基数排序不同于之前的各类排序
前面的排序或多或少通过使用比较和移动记录来实现排序
而基数排序的实现不需要进行对关键字的比较,只需要对关键字进行“分配”与“收集”两种操作即可完成
下面通过图来解释:
第一次排序:按照个位进行分组

分组后结果:

再将元素逐一取出:

第二次排序:根据十位上的数进行排序

再依次将元素取出:

第三轮排序:根据百位上的数进行排序

最后将所有元素取出:

代码实现:
基数排序就介绍到这里~
堆排序
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序
将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。
将其与末尾元素进行交换,此时末尾就为最大值
然后将剩余n-1个元素重新构造成一个堆,这样就会得到n个元素的次小值
如此反复的执行,便能得到一个有序序列了

代码实现:
堆排序就介绍到这里~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/182295.html