以下说明参照百度百科,因为其对冒泡排序的说明已经很清楚,故借用之。
基本概念:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
实现思路:用二重循环实现,外循环变量设为i,内循环变量设为j。假如有10个数需要进行排序,则外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i
性能分析:若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n*n)。
最基本的冒泡排序:
具体代码:
public class BubbleSortTest {
public static void BubbleSort(int[] a)
{
for(int i = 0; i < a.length - 1; i++)
{
for(int j = 0; j < a.length - i - 1; j++)
{
if(a[j] > a[j+1])//前比后大,交换
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
//打印出每趟排序的结果,只是为了显示过程,如果数组是正序,一趟就排好了
System.out.print("第" + (i+1) + "趟排序:");
for(int k =0; k < a.length; k++)
{
System.out.print(a[k] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[] a = {4,7,8,9,3,2};
BubbleSort(a);
}
}
优化:设置一个标志,如果这一趟发生了交换,则为true,否则为
false。明显如果有一趟没有发生交换,说明排序已经完成。
具体代码2:
public class BubbleSortTest {
public static void BubbleSort(int[] a)
{
boolean flag = true;
while(flag)
{
flag = false;
for(int i = 0; i < a.length - 1; i++)
{
for(int j = 0; j < a.length - i - 1; j++)
{
if(a[j] > a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
flag = true;
}
}
if(!flag) break; //如果没有发生交换,则退出循环
//打印出每趟排序的结果,只是为了显示过程,如果数组是正序,一趟就排好了
System.out.print("第" + (i+1) + "趟排序:");
for(int k =0; k < a.length; k++)
{
System.out.print(a[k] + " ");
}
System.out.println();
}
}
}
public static void main(String[] args) {
int[] a = {4,7,8,9,3,2};
int[] b = {1,2,3,4,5,6};
BubbleSort(b);
}
}
分享到:
相关推荐
该资源提供了Java中实现冒泡排序的全面指南。文档中涵盖了冒泡排序的基本概念,包括如何对数组进行排序以及如何在Java中实现冒泡排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现冒泡排序,包括详细的...
Java后端算法-冒泡排序和选择排序对比
详解Java常用排序算法-冒泡排序
1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复...
java算法,快速排序、冒泡排序、选择排序 快速排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51822361 冒泡排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51819045
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
* 冒泡排序: * 每次在无序队列里将相邻两个数一次进行比较, * 将小数调到前面,逐次比较,直至将最大的数移到 * 最后。将剩下的N-1个数继续比较,将次大数移至 * 倒数第二位。
java排序算法-大全.rar 集合了多种java排序算法
java排序算法java排序算法插入选择冒泡java排序算法插入选择冒泡
用java实现了以下算法: 1、冒泡排序、冒泡排序的两种改进。 2、插入排序。 3、选择排序。 4、希尔排序。 5、归并排序。 6、快速排序。
JAVA冒泡排序和快速排序算法,符合实验报告要求哦
java代码-使用java解决java冒泡排序算法的源代码 ——学习参考资料:仅用于个人学习使用!
Java语言实现的冒泡排序算法,代码里头有详细注释,注释皆为简单英文,这个算法比较经典,欢迎新手下载学习使用,欢迎后期的学习交流!
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
冒泡排序算法详细分析那还等hi实地阿基hihi大UI一及对阿迪年hiue一群
冒泡排序(Bubble Sort) 是一种基本的排序算法,它通过多次遍历数组,比较相邻元素的大小并交换它们,从而使最大(或最小)的元素逐渐移动到数组的最后。冒泡排序的实现在Java中非常简单,通过嵌套的循环来实现相邻...
冒泡排序是一种简单但效率较低的排序算法,它通过比较相邻元素并交换它们的位置,逐步将最大值“冒泡”到数组的末尾。在这个教程中,我们将深入研究冒泡排序的原理,并提供一个Java示例来演示如何实现它。不管您是...
该文档涵盖了数组排序的基本概念,包括如何实现各种排序算法,如冒泡排序、选择排序、插入排序、归并排序和快速排序。此外,文档还为每个排序算法提供了详细的代码示例和实现细节。 该文档还涵盖了高级主题,如如何...