JavaSE基础 - 数组排序之冒泡排序
2018-03-30 00:23
204 查看
冒泡排序的原理:每次把最大(或最小)的那个数,通过里层的循环冒泡到末端,然后通过外层循环对剩下的数再进行一次(重复)冒泡操作。
冒泡排序的时间复杂度:冒泡排序的最好情况下时间复杂度为
;最坏的情况下时间复杂度为
。
冒泡排序的次数:N个数比较N-1遍。(未改进的情况下)
现在,我用数组元素为:89,-3,43,12,69 为例(递增排序)图解。
过程解释:
第一次:89大于后面的数,冒泡到最末端,得到第一次比较最大的数89.
第二次:-3 < 43,位置不变;43 > 12,交换位置;43 < 69,位置不变。得到第二次比较最大的数69.
第三,四次:可以发现,虽然第三次已经有序,但是还要走第四次。
最终得到排序数组:-3,12,43,69,89.
代码如下:public class BubbleSort
{
public void sort(int[] a)
{
int temp = 0;
for (int i = a.length - 1; i > 0; --i)
{
for (int j = 0; j < i; ++j)
{
if (a[j + 1] < a[j])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
}图解过程中,我们发现,第三次排序时,数组已经有序,但是还是要继续冒泡,无疑增加了时间复杂度,如果我们能在数组已经有序的时候就结束循环,岂不是更好.
冒泡排序的改进:改进在数组排序过程未完成,而数组已经有序列的情况下,结束循环。代码如下:public static void bubbleSort(int[] list)
{
boolean isSorted = true; //添加有序标志。
for (int i = 0; i < (list.length - 1) && isSorted; i++)
{
isSorted = false;
for (int j = 0; j < (list.length - 1 -i); j++)
{
if (list[j] > list[j + 1])
{
int temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
isSorted = true;
}
}
}
} 若某次循环时,内层循环的if语句未被执行,则isSorted = false.外层循环的条件不满足,终止循环。
总结:冒泡循环是排序算法中最为基础的,掌握并理解它是必不可少的。希望我的文章对你有所帮助。
冒泡排序的时间复杂度:冒泡排序的最好情况下时间复杂度为
;最坏的情况下时间复杂度为
。
冒泡排序的次数:N个数比较N-1遍。(未改进的情况下)
现在,我用数组元素为:89,-3,43,12,69 为例(递增排序)图解。
过程解释:
第一次:89大于后面的数,冒泡到最末端,得到第一次比较最大的数89.
第二次:-3 < 43,位置不变;43 > 12,交换位置;43 < 69,位置不变。得到第二次比较最大的数69.
第三,四次:可以发现,虽然第三次已经有序,但是还要走第四次。
最终得到排序数组:-3,12,43,69,89.
代码如下:public class BubbleSort
{
public void sort(int[] a)
{
int temp = 0;
for (int i = a.length - 1; i > 0; --i)
{
for (int j = 0; j < i; ++j)
{
if (a[j + 1] < a[j])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
}图解过程中,我们发现,第三次排序时,数组已经有序,但是还是要继续冒泡,无疑增加了时间复杂度,如果我们能在数组已经有序的时候就结束循环,岂不是更好.
冒泡排序的改进:改进在数组排序过程未完成,而数组已经有序列的情况下,结束循环。代码如下:public static void bubbleSort(int[] list)
{
boolean isSorted = true; //添加有序标志。
for (int i = 0; i < (list.length - 1) && isSorted; i++)
{
isSorted = false;
for (int j = 0; j < (list.length - 1 -i); j++)
{
if (list[j] > list[j + 1])
{
int temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
isSorted = true;
}
}
}
} 若某次循环时,内层循环的if语句未被执行,则isSorted = false.外层循环的条件不满足,终止循环。
总结:冒泡循环是排序算法中最为基础的,掌握并理解它是必不可少的。希望我的文章对你有所帮助。
相关文章推荐
- [javaSE] 数组(排序-冒泡排序)
- JAVA基础再回首(十一)——数组高级(冒泡排序和选择排序)、Arrays类、基本类型包装类、Integer类
- 三种最简单基础的排序 选择排序 冒泡排序 直接插入排序 运用了函数指针数组
- javaSE基础-数组排序
- 黑马程序员_C语言基础_数组之冒泡排序、快速选择排序、折半查找
- JavaSE基础 - 数组排序之选择排序
- 黑马程序员_JavaSE基础05 之 数组的操作 求最值 排序 折半查找
- 黑马程序员_JavaSE基础06 之 数组的操作 求最值 排序 折半查找
- Java基础04:选择排序;冒泡排序;折半查找;二位数组
- JavaSE基础数组排序
- 基础算法--排序: 之冒泡排序
- PHP冒泡排序和数组排序的区别。
- 使用指针法对数组进行冒泡排序、选择排序、插入排序法、二分查找法
- 数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序
- 算法基础之排序篇-冒泡排序
- 2017/12/31Java基础学习——数组排序のArrays工具类的Arrays.sort()方法
- 数组的常见操作:冒泡排序 选择排序与取最值
- Java排序算法(冒泡排序、选择排序、插入排序、反数组排序、快速排序)例子
- 实现冒泡排序。(排序整形数组)。使用数组和指针两种方法。
- C#基础:通过委托给任何对象数组进行排序