冒泡排序详解

最近面试经常有面排序算法相关的问题,碰壁许多次,下定决心,一定要彻底弄懂常见的排序算法,就从最简单的冒泡排序开始吧!!


冒泡排序(bubbleSort)

原理:首先从第一个元素开始,让它和其相邻的元素进行比较(即第一个元素与第二个元素比较,第二个元素和第三个元素比较...以此类推),外层循环控制比较的趟数,内层循环控制一趟内的比较次数,每一趟循环过后,该列数组中最大值将会沉到数组最末尾,这样第二趟比较,就不需要去比较它了,以此类推,当外层循环结束后,排序完成。

时间复杂度:主要时间开销在循环比较上,通过计算我们可以得出结论,冒泡排序每一趟比较的次数是满足等差数列的,所以循环次数 = n(n-1)/2 ,由此可得时间复杂度为O(n^2)


代码实现:

本例由Java实现

public static void bubbleSort(int[] numbers) {
int temp = 0;
int size = numbers.length;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) { //内层循环的条件限定,最后一个数不用比较
if (numbers[j] > numbers[j + 1]) // 交换两数位置
{
temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}

//输出排序后的数组
for(int num : numbers){
System.out.print(" "+num);
}
}




结论:死记硬背代码,是没有什么效果的,很容易就忘记了。当然工作中谁也不会让你不能用google或者百度查资料,但是研究清楚一些常用的算法对自身编程能力的提高有很大帮助,慢慢努力,想更好的层次递进!!

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