冒泡排序
时间复杂度是O(n^2),
一开始交换的区间是0~n-1,也就是整个数据的整体,然后第一个数与第二个数进行比较,哪个大哪个就放在后面,然后第二个数和第三个数比较,**这样依次交换过去,最大的数最终会放在数组最后的一个位置。
然后把范围从0~n-1变为0~n-2,这样一来第二个数在交换过后,会放在整个数据倒数第二个位置
依次进行交换过程中,把范围从0~n-1 到 范围只剩下一个数的时候,整个数组就变得有序了
选择排序
时间复杂度是O(n^2),
一开始从0~N-1数据上选择一个最小值把它放到第零个位置上;
然后从1~N-1上选择一个最小值放到第一位置上;
这样依次从0~N-1到1~N-1,2~N-1……直到最后只包含一个数的时候,整个数就变得有序了
插入排序
时间复杂度是O(n^2),
首先是位置1的数和位置0的数进行比较,如果位置1的数比位置0的数小,就比较两者的位置;
接着是位置2的数和位置1的数进行比较,……,排完后如果位置1的数比位置0还小……;
也就是说位置k的数假设值为b依次和前面位置的数进行比较,如果小,就依次和前面的数进行交换的过程,直到前面的数一直小于等于b,那么b就插入当前位置。
那么我们依次从一位置到N-1位置的所有数都进行这样的比较,进行插入的过程,整个数就变得有序了
归并排序
规定数中的每一组长度为一的有序区间
然后把相邻的为1的有序区间,进行合并,得到一个相邻长度为二的有序区间,最后再把相邻的有序区间进行合并得到长度为4的有序区间,依次这样下去,4和八,八和十六,直到所有的数字合并成为n的区间,那么整个数就变得有序了
快速排序
随机的在数据中选择一个元素,小于对于它的数,统一的放在它的左边,大于它的数,放在它的右边。
然后接下来对这两个部分的数进行递归调用快速排序的过程,这样使得整个数都有序了。
划分过程是怎么样的?
首先将划分值放在整个数的最后的位置,然后设计一个小于等于区间初始时长度为0,放在整个数组的左边
然后从左到右遍历所有元素,如果当前元素大于我的划分值,那就继续遍历下一个元素,如果当前值小于等于我划分的值,那么我就把当前数和之前定义小于等于区间的下一个数进行交换, 然后令小于等于区间向右挪动一个位置,然后遍历所有的元素,直到最后的数的时候,也就是划分值,与小于等于区间的下一个元素进行交换。整个就是一个完整的划分过程,
它的时间复杂度为O(N),
堆排序
先把数组中的n个数建立成一个大小为n 的大根堆,那么我们知道堆顶是所有元素中最大的一个值,把堆顶元素和最后一个元素进行交换,然后把最大值脱离堆结构,放到数组的最后一个位置
……
希尔排序
它是快速排序的改良版