冒泡排序 思想 JAVA实现
已知一个数组78、75、91、36、72、94、43、64、93、46,使用冒泡排序将此数组有序。
冒泡排序是一个运行时间为O(N²)的排序算法。
算法思想:(已从小到大为例)
78、75、91、36、72、94、43、64、93、46 数组元素
0、 1、 2、 3、 4、 5、 6、 7、 8、 9 数组下标
首先进行第一轮排序。数组长度为array.length。
将index[0]与index[1]有序。若ndex[0]>index[1] 则交换数组元素,否则不操作。
其次将index[1]与index[2]有序,若ndex[1]>index[2] 则交换数组元素,否则不操作。
再其次将index[2]与index[3]有序,若ndex[2]>index[3] 则交换数组元素,否则不操作。
。。。。
直到第一轮排序将数组中最大的元素排序到 数组的最右侧。则第一轮排序结束。
开始第二轮排序,因为数组最后一个元素已经有序,故数组长度为array.length-1。(第二轮排序将最后一个元素排除在外)。
。。。。
开始第三轮排序,因为数组最后两个元素已经有序,故数组长度为array.length-2。(第二轮排序将最后两个元素排除在外)。
。。。。
第四轮,第五轮。直到全部有序。
已下采用java实现:
public class MaoPaoOrder {
private int[] Array;
private int currentIndex;
private int maxIndex;
public MaoPaoOrder(int size) {
this.Array = new int[size];
this.currentIndex = 0;
this.maxIndex = size-1;
}
public void insert(int value) {
if(this.maxIndex<this.currentIndex) {
System.out.println("数组已满");
}else {
this.Array[this.currentIndex++] = value;
}
}
public void order() {
int out = this.Array.length-1;
for(int i=out;i>0;i--) { //两层循环,外层循环控制 ‘数组的长度’,内层循环进行比较交换。冒泡排序是将有序元素集中到数组的最右侧。
for(int j=0;j<out;j++) { //控制数组长度为要点,其余进行比较交换即可。
onchange(j,j+1);
}
}
}
private void onchange(int pre,int next) {
if(this.Array[pre]>this.Array[next]) {
int temp = this.Array[next];
this.Array[next] = this.Array[pre];
this.Array[pre] = temp;
}
}
public void show() {
for (int i : Array) {
System.out.println(i);
}
}
}
最终结果:36、43、46、64、72、75、78、91、93、94
冒泡排序由于进行了大量的比较复制操作,所以其运行时间为O(N²),属于效率比较低的一种排序算法。
冒泡排序 思想 JAVA实现的更多相关文章
- 冒泡排序之Java实现
冒泡排序之Java实现 一.方法一 package cn.com.zfc.lesson21.sort; import java.util.Arrays; /** * * @title BubbleSo ...
- 基本算法思想Java实现的详细代码
基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...
- 33.JAVA编程思想——JAVA IO File类
33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...
- 插入排序 思想 JAVA实现
已知一个数组 60.28.41.39.6 .18 .14.28.49.31 利用插入排序算法进行排序 插入排序是一个运行时间为O(N²)的排序算法. 算法思想 60.28.41.39.6 .18 . ...
- 冒泡排序优化JAVA
本文对传统的冒泡排序进行了一些优化,减少了循环次数. 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 C 和记录移动次数 M 均达到最小值: C(min)=n-1 , ...
- Java基础(45):冒泡排序的Java封装(完整可运行)
1.冒泡排序 package lsg.ap.bubble; import java.util.*; public class BubbleSort { public static void bubbl ...
- 冒泡排序法-java案例详解
/** * 功能:冒泡排序法 * 思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码, * ,若发现逆序这交换,使得排序码较小的元素逐渐从后部移向前部(从下标较大的单元移 ...
- 冒泡排序实现(Java)
冒泡排序是一种交换排序,它的基本思路是: 两两比较相邻记录的关键字,如果反序则交换,知道没有反序的记录位置. 依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数, ...
- 关于冒泡排序的Java代码实现
一.排序算法的历史: 排序算法的发展历史几乎和计算机的发展历史一样悠久,而且直到今天,世界范围内依然有计算机科学家正在研究着排序的算法,由此可见排序算法的强大魅力. 我们现在介绍的排序算法都是前任 ...
随机推荐
- Android 4.4 外置卡
虾米.酷狗.百度地图.UC浏览器 下载 可以设置下载路径保存到外置SD卡上. 其他的软件目前还不支持. 最终Android 4.2是可以选择的,后来Android禁用了外置卡,以上软件是如何实现的?
- (转)CSS布局-负边距-margin
css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...
- Table Tennis Game 2
Description Misha and Vanya have played several table tennis sets. Each set consists of several serv ...
- Lyx/LaTeX笔记04---插入伪代码
1 可用的宏包 常用的排版伪代码包有clrscode, algorithm, algorithmic, algorithmicx, algorithm2e 2 clrscode clrscode是著名 ...
- System.Security.Cryptography.CryptographicException: 出现了内部错误。
引用:http://www.cnblogs.com/ithome8/p/5189926.html 我总结了一下出现证书无法加载的原因有以下三个 1.证书密码不正确,微信证书密码就是商户号 解决办法:请 ...
- CasperJs 入门介绍
CasperJs 是一个基于 PhantomJs 的工具,其比起 PhantomJs 可以更加方便的进行 navigation. 1.安装 CasperJS 依赖于 PhantomJS >= 1 ...
- js中 visibility和display的区别 js中 visibility和display的区别
大多数人很容易将CSS属性display和visibility混淆,它们看似没有什么不同,其实它们的差别却是很大的. visibility属性用来确定元素是显示还是隐藏,这用visibility=&q ...
- 面试中的C++常见问题
1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可 ...
- 刷题向》图论》BZOJ1179 关于tarjan和SPFA的15秒(normal)
这道题可以考察图论的掌握程度(算半道水题) 题目如下 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i ...
- laravel 中的Gates,以及修改模型
Gates 是一个用于判断用户是否有权进行某项操作的闭包,通常使用Gate 门面定义在 App\Providers\AuthServiceProvider类中.Gates 总是接收用户实例作为第一个参 ...