引用
笔记--冒泡排序
1.冒泡排序类
package com.flysnow.chap03;
/**
* 冒泡排序
* @author 飞雪无情
* @since:2010-3-25
*/
public class ArrayBub {
private long[] a;
private int nElems;
public ArrayBub(int max){
a=new long[max];
nElems=0;
}
/**
* 插入元素
* @param value
*/
public void insert(long value){
a[nElems]=value;
nElems++;
}
/**
* 打印元素
*/
public void display(){
for(int i=0;i<nElems;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
/**
* 冒泡排序
*/
public void bubbleSort(){//性能O(N^2)
for(int out=nElems-1;out>0;out--){//外循环,控制趟数
for(int in=0;in<out;in++){//内循环,控制一趟比较次数
if(a[in]>a[in+1]){//交换位置
swap(in,in+1);
}
}
}
}
/**
* 交换
* @param one 数组索引
* @param two 数组索引
*/
private void swap(int one, int two) {
long temp=a[one];
a[one]=a[two];
a[two]=temp;
}
}
2.冒泡排序测试
package com.flysnow.chap03;
import java.util.Random;
/**
* 冒泡排序测试
* @author 飞雪无情
* @since:2010-3-25
*/
public class BubbleSortApp {
public static void main(String[] args){
ArrayBub bub=new ArrayBub(100);
Random random=new Random();
for(int i=0;i<10;i++){//添加10个随机数
bub.insert((long)(random.nextFloat()*100));
}
bub.display();//未排序
bub.bubbleSort();//排序
bub.display();//排序后
}
}
3.总结
算法思想:
- 第一趟,从队列的最左边开始,比较0号和1号的数据,如果0号的数据大于1号的,则交换位置,否则什么都不做。然后右移一个位置,比较1号和2号的数据,和刚才一样,一次类推走完第一趟。
- 第二趟,也是从最左边开始,比较0号和1号数据。。。一直到n-1号数据
- ........
- 直到比较到0号数据.
- 描述: 冒泡排序
- 大小: 17.4 KB
分享到:
相关推荐
第一轮结束后,最大的元素52会移动到A[1]的位置,第二轮结束后,第二大的元素47会移动到A[2]的位置。因此,经过该程序段加工后,数组元素A[1]到A[6]的值依次为{47,52,39,15,21,6}。 2. 第二段代码段的逻辑稍显复杂...
例如,在给定的数组 `[4, 5, 7, 1, 2, 3]` 排序时,第二趟排序结束后,数组已经完全有序,但是原算法还需要继续执行后续的遍历。通过添加标志变量的方式,可以在发现数组已有序时提前结束排序过程,从而提高效率。
2. 如果第一个元素大于第二个元素,就交换它们的位置。 3. 对每一对相邻元素做同样的操作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是序列中的最大值。 4. 针对所有的元素重复以上的步骤,除了最后...
js冒泡排序,冒泡排序的工作原理,我们有一个未排序的数组arr = [ 1, 4, 2, 5, -2, 3 ]任务是使用冒泡排序对数组进行排序。 冒泡排序比较索引 0 中的元素,如果第 0 索引大于第 1 索引,则交换值,如果第 0 索引...
2. 然后比较第二个和第三个数据,仍将较小放到后一个位置。 3. 依此类推,直到比较第n-1和第n个数据。 4. 这样,就将待排序序列中的最大的一个放到了第n个数据,这个过程称为第一趟排序。 5. 下面对前N-1个数据重复...
3. 重复第二步,直到所有元素均排序完毕。 在链表中实现这两种排序方法时,需要考虑链表节点的结构和指针操作。链表的特性使得我们不能像数组那样直接通过下标访问元素,而是需要通过指针来遍历和修改节点。因此,...
2. 第二遍遍历,比较并交换,数组变为[3, 4, 2, 5, 8](5被放到了倒数第二的位置) 3. 第三遍遍历,比较并交换,数组变为[3, 2, 4, 5, 8](4被放到了倒数第三的位置) 4. 第四遍遍历,比较并交换,数组变为[2, 3, 4,...
##### 第二种实现方式 ```cpp void bubble_sort(int* d, int n) { int t; bool flag = true; for (int i = 1; i ; i++) { if (flag == false) return; flag = false; for (int j = n - 1; j >= i; j--) { if ...
例如,你可以先按照第一列排序,然后再对每一行的子序列按照第二列排序,以此类推。这将涉及到嵌套排序的实现,需要更复杂的代码来处理。 在实际应用中,冒泡排序效率较低,一般适用于小规模数据或教学演示。对于大...
冒泡排序的算法可以分为三个部分:初始、第一趟扫描和第二趟扫描。 1. 初始:将被排序的记录数组 R[1..n] 垂直排列,每个记录 R[i] 看作是重量为 R[i].key 的气泡。 2. 第一趟扫描:从下往上扫描数组 R,凡扫描到...
3. **平均时间复杂度**:在大多数情况下,冒泡排序的时间复杂度为O(n^2),这使得它在大数据量排序时效率较低。 #### 四、冒泡排序的空间复杂度分析 冒泡排序是一种原地排序算法,它不需要额外的存储空间,因此空间...
第二步是重复第一步直到整个数组都已经排序。 快速排序是一种高效的排序算法,其时间复杂度为O(n log n),其中n是要排序的元素个数。快速排序的基本思想是选择一个pivot元素,然后将数组分为两个部分:小于pivot的...
i++)`从第二个元素开始,因为第一个元素默认认为已排序。内层循环`for (int j = i; (j > 0) && (a[j] [j - 1]); j--)`用于找到合适的位置将当前元素插入,保持前面的元素都是已排序的。 最后,代码还使用了Java...
在实际应用中,冒泡排序效率较低,时间复杂度为O(n^2),对于大数据量或性能要求高的场景,通常会选择其他更高效的排序算法,如快速排序、归并排序或堆排序等。然而,由于其简单易懂,冒泡排序在教学和理解排序算法...
如果第一个比第二个大,就交换它们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的...
2. **冒泡排序算法**:实现冒泡排序的关键在于理解其核心逻辑。冒泡排序通过两两比较相邻元素,如果前一个元素大于后一个,则交换它们的位置。这个过程会从第一个元素开始,到最后一个元素结束,然后再从头开始,...
冒泡排序、选择排序和插入排序是三种基本的排序算法,它们都是在计算机科学中用于组织数据的关键技术。这些算法的实现通常用作教学示例,帮助初学者理解排序过程和时间复杂性。 **冒泡排序(Bubble Sort)**: 冒泡...
- 在实际应用中,冒泡排序的时间复杂度较高(O(n^2)),在大数据量的情况下效率较低,可以考虑使用更高效的排序算法如快速排序或归并排序等。 以上是对“数据结构中的冒泡排序以及输出每趟排序结果”这一知识点的...
选择排序的思想是找到最小(或最大)的元素,与第一个元素交换位置,然后在剩余元素中找最小的元素与第二个元素交换,以此类推。`SelectionSorter`类实现了选择排序,它使用两个嵌套循环,外层循环遍历所有元素,内...
冒泡排序是一种基础的排序算法,它通过重复遍历待排序的序列,比较相邻元素并交换位置,使得每个元素都能“浮”到它应该在的位置上。在这个Java GUI实现的冒泡排序项目中,我们利用了NetBeans工具来设计用户界面,使...