常见排序及复杂度分析(未完待续)

冒泡排序

从头开始,依次比较相邻两个元素大小,以升序为例,我们每次遍历把当前范围的最大值置尾,遍历(n-1)次后完成排序。

具体操作为,外层套循环,依次遍历,最多需要(n-1)次。每次选中两个相邻元素,如果右>左,则将两元素位置交换,如果正确则不动,那么我们就将较大的元素置后了,依次遍历就实现了最大元素置尾。那么进行最多n-1次后,就实现了整体的排序。

下面我们分析一下时间复杂度:
还是以升序为例,最好情况就是顺序已经排好了,不用移动,那么我们就没有消耗;最坏情况对于冒泡排序而言,就是整个相反,那么我们每个元素都需要花费一次遍历把它移到队尾,需要移动n-1次。然后我们再进行n-1次遍历,时间复杂度为O(n2)。

编程实现部分:采用双层for循环。外层循环索引为循环序数,每完成一次循环,便确定一个数的位置(将当前遍历的数组中最大值置于最后)。内层循环指向不同的相邻元素,遍历范围为:n-i-1

例:有10个数,由于最后一次无需移动,则遍历9次即可完成,那么便是

for(int i=0; i<number.length-1; i++)

对于内层:

for(int j=0; j<number.length-i-1; j++

你可能感兴趣的:(排序算法,java)