冒泡排序详解
2017-06-02 17:23
218 查看
最近面试经常有面排序算法相关的问题,碰壁许多次,下定决心,一定要彻底弄懂常见的排序算法,就从最简单的冒泡排序开始吧!!
冒泡排序(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或者百度查资料,但是研究清楚一些常用的算法对自身编程能力的提高有很大帮助,慢慢努力,想更好的层次递进!!
冒泡排序(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或者百度查资料,但是研究清楚一些常用的算法对自身编程能力的提高有很大帮助,慢慢努力,想更好的层次递进!!
相关文章推荐
- 数据结构排序系列详解之三 冒泡排序
- 经典算法详解 之 冒泡排序
- 冒泡排序深入详解
- php冒泡排序与快速排序实例详解
- 【17】-冒泡排序详解
- [031]八大排序算法详解——冒泡排序
- 【内部排序】四:冒泡排序(Bubble Sorting)详解与代码
- 蛮力算法: 选择排序 冒泡排序(详解)
- php冒泡排序与快速排序实例详解
- 经典算法详解 之 冒泡排序
- 冒泡排序和直接选择排序详解
- 冒泡排序原理详解
- 详解冒泡排序
- PHP冒泡排序详解
- 冒泡排序(bubble_sort)详解
- PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
- Bubble Sort (排序详解 之 冒泡排序)
- java 算法之冒泡排序实例详解
- 【17】-冒泡排序详解
- hdoj2037详解(附带浅谈冒泡排序)