今天,学习了三种排序方法,为了加强记忆,决定对今天的学习做一个小结。话不多说,进入正题。
冒泡排序
比如说现在需要对一个长度为N的数组进行排序。排序的思想是,首先从数组的第一个元素开始,前一个数与后面的相邻的数进行比较如果前面的数大于后面的数,就将两数交换位置,否则位置不变。第一轮下来,数组中的每个数除了最后一个元素之外都会与后面的数进行比较,所以第一轮能够确定出数组中最大的数,并且放在了 数组的最右边。以此类推,每轮比较,都会确定一个数。所以如果想要对N个数进行排序,我们要进行N-1轮的比较来确定N-1个数的位置。每一轮比较的方式都是相同的:前一个数与后一个数进行比较,这里需要注意的是确定过的数就不需要在比较了,所以每轮比较的次数比前一轮的次数少一次。下面用代码进行说话:
因为有N-1个数需要确定位置,所以需要N-1次的循环比较,第i次循环中比较的次数为N-1-i所以此算法的时间复杂度为o(N^2).这个算法的复杂度是不变的,不会随着数据的情况而变化。
选择排序
选择排序的思想是,每一次从待排序的数中选择最大的(最小的),放在数组的最右边,直至排完全部数为止。
因为数组中有N个数,所以需要依次选出N-1个数,每选一个数都需要遍历数组中待排的数字,需要遍历N-1-i次。所以此算法时间复杂度是一个o(N^2).此算法的复杂度也不会随着数据的变化而变化。
代码如下:
插入排序
插入排序的思想是每个数与其后面相邻的数比较,如果大于后面的那就交换位置,同时再将交换来的数与前面的数依次进行比较,如果小于那么就交换位置否则位置不变。插入排序的时间复杂度是随着数据的情况改变的,所以最好情况的的时间复杂度为o(N)。最坏情况的时间复杂度为o(N^2)。
代码如下
以上就是三种基本的排序算法,冒泡排序与选择排序的时间复杂是不变的。插入排序的时间复杂度是随着者数据的情况而变得。