时间复杂度为O(n^2)的排序算法:冒泡排序,选择排序,插入排序
数组a[N]中进行冒泡排序
冒泡排序:
假如数组为[3,7,4,6,8,9,1]-->[3,7,4,6,8,9,1]-->[3,4,7,6,8,9,1]....一直进行下去,相邻2个数进行比较。
1.第一轮:数组相邻2个元素相比较(a[0]和a[1]比,a[1]和a[2]比,a[2]和a[3]比,a[3]和a[4]比...),较大数往后放,一直相邻比较到数组最后一个数。
第二轮继续数组相邻比较,此时一直相邻比较到数组倒数第二个元素。
...一直到最后一轮只用比较a[0]和a[1]比时,结束。
在整个数组中进行,a[0]与a[1]比较,较大的数放在a[1],然后a[1]和a[2]进行比较,相等或者较大数放a[2],以此类推一直比较到数组的最后一位,比较完成后此时的数组的最后一个元素就为整个数组的最大数。确定了一个最大数后,在进行冒泡,不过此时进行的范围就是整个数组长度-1的范围内,因为第一轮后我们已经确定了最后一位是最大的,接着进行的是整个数组中第二大的数,它将被放在整个数组的倒数第二位中。依次进行下去,冒泡的范围在数组的第一位时,此时这个数组完成排序。
选择排序:
假如数组为[3,7,4,6,8,9,1] --->[1,7,4,6,8,9,3]-->[1,3,4,6,8,9,7]--->.....
找出数组中最小的数,放在第一位上。接下来找数组中除了第一位中最小的数,放在第二位上。以此类推
1.取出数组中第一个数放入临时变量tmp中,然后遍历数组,遇到比tmp值还小的数,则这个数赋值给tmp,temp中的数为数组最小。并将最小数所在的位置和数组第一的位置的值互换。
2.取出中第二个数做第一步相同处理。则整个数组中第二小的数放在数组第二位。
3.以此类推
插入排序:
假如数组为[3,7,4,6,8,9,1]-->[3,7,4,6,8,9,1]-->[3,4,7,6,8,9,1]-->[3,4,6,7,8,9,1]....
1.从数组中第二个数(下标为1)开始,向前比较(因为第一个数前面没有别的数了,且下标为0),若比第一个数小,则与第一个数交换位置。
2.从数组中第三个数开始,向前比较,若比第二个数大,则不需要移动位置因为第二个数肯定比第一个数大,若比第二个数小,则还需要比较第一个数,若比第一个数还小则需要和第一个数比较,若比第一个数大,则只需要和第二个数交换位置。
3.从数组中第n个数比较,若比第n-1大,则继续比较第n-2个。。在代码实现中就是若比前面那个数小则与它互换位置,继续向前比较。直到和第一个数比较。
还有3个算法:快速排序,堆排序,希尔排序。改日更新
还有2个算法:基数排序和计数排序