JAVA冒泡排序 (java冒泡排序法代码)
本文目录导航:
JAVA冒泡排序
在Java编程言语中,冒泡排序是一种便捷直观的排序算法。
它重复地走访过要排序的数列,一次性比拟两个元素,假设他们的顺序失误就把他们替换上来。
走访数列的上班是重复地启动直到没有再须要替换,也就是说该数列曾经排序成功。
上方是一个经常使用Java成功的冒泡排序算法示例。
首先定义一个数组a,初始化为{2,1,3,9,7,10,8,11,17,6}。
程序经过调用sortArr方法成功冒泡排序。
sortArr方法接受一个整数数组和两个索引作为参数,用于管理排序的范畴。
在主方法main中,首先输入未排序的数组,而后调用sortArr方法对数组启动排序,再次输入排序后的数组。
最后,程序再次调用sort方法对数组启动排序,并输入最终结果。
在sortArr方法中,经常使用了两个嵌套的for循环。
外部循环遍历数组的索引范畴,外部循环比拟相邻元素的大小。
假设前一个元素大于后一个元素,则替换它们的位置。
经过这种模式,较大的元素会逐渐“冒泡”到数组的末尾。
sort方法的成功相对便捷,它将整个数组视为一个待排序的范畴,间接调用sortArr方法启动排序。
这个方法没有额外的参数,适用于对整个数组启动排序。
冒泡排序算法的期间复杂度为O(n^2),其中n是数组的长度。
只管它的效率较低,但关于小规模的数据集来说,它是一个易于了解和成功的排序算法。
在实践运行中,冒泡排序理论不会用于大规模数据集的排序,由于存在更高效的算法,如极速排序、归并排序等。
在本示例中,咱们经过调用sort方法对数组启动排序。
sort方法雷同应用了sortArr方法,但不须要额外的参数,适用于对整个数组启动排序。
经过上述代码,咱们可以看到冒泡排序算法的基本成功方法。
这个示例不只展现了排序算法的逻辑,还经过实践代码展现了如何经常使用数组和循环结构启动数据操作。
在实践编程中,冒泡排序算法或者不是最佳选用,尤其是在解决大数据集时。
但是,关于初学者来说,它是一个很好的学习工具,能够协助了解排序算法的基本原理和成功方法。
冒泡排序的成功环节便捷直观,易于了解和成功。
在某些特定场景下,如教学或小规模数据集的排序,它依然具备必定的适用价值。
经过以上示例代码,咱们能够明晰地看到冒泡排序的整个流程,以及它在Java中的成功模式。
java中编写冒泡排序算法 bubbleSort(int[]arr)
java中冒泡排序算法的详细解答以及程序?
实例说明用冒泡排序方法对数组启动排序。
实例解析替换排序的基本思维是两两比拟待排序记载的关键字,发现两个记载的秩序雷同时即启动替换,直到没有反序的记载为止。
运行替换排序基本思维的重要排序方法有冒泡排序和极速排序。
冒泡排序将被排序的记载数组 R[1..n] 垂直陈列,每个记载 R[i] 看做是重量为 R[i] 的气泡。
依据轻气泡不能在重气泡之下的准则,从下往上扫描数组 R 。
凡扫描到违犯本准则的轻气泡,就使其向上“沉没”。
如此重复启动,直到最前任何两个气泡都是轻者在上,重者在下为止。
(1) 初始, R[1..n] 为无序区。
(2) 第一趟扫描,从无序区底部向上依次比拟相邻的两个气泡的重量,若发现轻者在下、重者在上,则替换二者的位置。
即依次比拟 (R[n],R[n-1]) 、 (R[n-1],R[n-2]) 、 … 、 (R[2],R[1]); 关于每对气泡 (R[j+1],R[j]), 若 R[j+1]<R[j], 则替换 R[j+1] 和 R[j] 的内容。
第一趟扫描终了时,“最轻”的气泡就飘浮到该区间的顶部,即关键字最小的记载被放在最洼位置 R[1] 上。
(3) 第二趟扫描,扫描 R[2..n]。
扫描终了时,“次轻”的气泡飘浮到 R[2] 的位置上 …… 最后,经过 n-1 趟扫描可获取有序区 R[1..n]。
留意:第 i 趟扫描时, R[1..i-1] 和 R[i..n] 区分为以后的有序区和无序区。
扫描仍是从无序区底部向上直至该区顶部。
扫描终了时,该区中最轻气泡沉没到顶部位置 R[i] 上,结果是 R[1..i] 变为新的有序区。
冒泡排序算法由于每一趟排序都使有序区参与了一个气泡,在经过 n-1 趟排序之后,有序区中就有 n-1 个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序环节至少须要启动 n-1 趟排序。
若在某一趟排序中未发现气泡位置的替换,则说明待排序的无序区中一切气泡均满足轻者在上,重者在下的准则,因此,冒泡排序环节可在此趟排序后中断。
为此,在上方给出的算法中,引入一个布尔量 exchange, 在每趟排序开局前,先将其置为 FALSE 。
若排序环节中出现了替换,则将其置为 TRUE 。
各趟排序完结时审核 exchange, 若不曾出现过替换则中断算法,不再启动下趟排序。
详细算法如下:void BubbleSort(SeqList R){//R(1..n) 是待排序的文件,驳回自下向上扫描,对 R 做冒泡排序int i,j;Boolean exchange; // 替换标记for(i=1;i<n;i++){ // 最多做 n-1 趟排序exchange=FALSE; // 本趟排序开局前,替换标记应为假for(j=n-1;j>=i;j--) // 对以后无序区 R[i..n] 自下向上扫描if(R[j+1]<R[j]){ // 替换记载R[0]=R[j+1]; //R[0] 不是哨兵,仅做暂存单元R[j+1]=R[j];R[j]=R[0];exchange=TRUE; // 出现了替换,故将替换标记置为真}if(!exchange) // 本趟排序未出现替换,提早中断算法return;} //endfor( 外循环 )}//BubbleSort