天天看点

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

先总结一下算法的时间复杂度

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

此文章只对前4种算法做总结

一. 冒泡排序(BubbleSort)

基本思想:

两个数比较大小,较大的数下沉,较小的数冒起来。

过程:

比较相邻的两个数据,如果第二个数小,就交换位置。

从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。

继续重复上述过程,依次将第2.3...n-1个最小数排好位置。

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

平均时间复杂度:O(n2)

java代码实现:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

优化:

针对问题

数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。

方案

设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。

这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。

实例

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

二. 选择排序(SelctionSort)

基本思想:

在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;

第二次遍历n-2个数,找到最小的数值与第二个元素交换;

。。。

第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

过程:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

选择排序

平均时间复杂度:

O(n2)

java代码实现:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

三. 插入排序(Insertion Sort)

基本思想:

在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

过程:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

插入排序

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

相同的场景

平均时间复杂度:

O(n2)

java代码实现:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

四. 希尔排序(Shell Sort)

前言:

数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1;

数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3;

如果数据序列基本有序,使用插入排序会更加高效。

基本思想:

在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。

然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。

过程:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)

希尔排序

平均时间复杂度:

O(n1.5)

java代码实现:

人工智能常用的29种算法_8种常用排序算法总结(1)一. 冒泡排序(BubbleSort)二. 选择排序(SelctionSort)三. 插入排序(Insertion Sort)四. 希尔排序(Shell Sort)