排序算法之冒泡算法
2015-09-13 23:54
561 查看
public class TestSort{
/**
*
* 冒泡算法1
* 实现大的数字往后冒
* @param a
* @return
*/
public int[] bubbleSort_1(int a[]){
int temp;
for (int i=0;i<a.length;i++){
for(int j=1;j<a.length-i;j++){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
return a;
}
/**
* 冒泡算法2
* 实现小的数字往前冒
* @param a
* @return
*/
public int[] bubbleSort_2(int a[]){
int temp;
for (int i=0;i<a.length;i++){
for(int j=a.length-1;j>i;j--){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
return a;
}
public static void main(String[] args) {
int a[]={3,6,24,12,17,45,43,25,1,7,9};
TestSort sort=new TestSort();
int b[]=sort.bubbleSort_2(a);
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
}
}
冒泡算法的实现比较简单,其时间的复杂度为O(n^2).
教科书上写着冒泡算法在数列原本就是正序的时候性能最好,最好的时间为O(n).
这其实是给人造成误解的。
因为以上的冒泡算法的实现无论是在数列顺序怎样的情况下时间复杂度都为O(n^2),当数列为正序的情况下只是元素交换的三个步骤省去了,当然性能得到了提升,但是其比较的次数并没有得到减少,因此时间复杂度并没有变化。
而书上提到的O(n)的情况是经过以上的冒泡算法改进的。
其源代码如下:
public void bubbleSort(int arr[]) {
boolean didSwap;
for(int i = 0, len = arr.length; i < len - 1; i++) {
didSwap = false;
for(int j = 0; j < len - i - 1; j++) {
if(arr[j + 1] < arr[j]) {
swap(arr, j, j + 1);
didSwap = true;
}
}
if(didSwap == false)
return;
}
}
/**
*
* 冒泡算法1
* 实现大的数字往后冒
* @param a
* @return
*/
public int[] bubbleSort_1(int a[]){
int temp;
for (int i=0;i<a.length;i++){
for(int j=1;j<a.length-i;j++){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
return a;
}
/**
* 冒泡算法2
* 实现小的数字往前冒
* @param a
* @return
*/
public int[] bubbleSort_2(int a[]){
int temp;
for (int i=0;i<a.length;i++){
for(int j=a.length-1;j>i;j--){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
return a;
}
public static void main(String[] args) {
int a[]={3,6,24,12,17,45,43,25,1,7,9};
TestSort sort=new TestSort();
int b[]=sort.bubbleSort_2(a);
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
}
}
冒泡算法的实现比较简单,其时间的复杂度为O(n^2).
教科书上写着冒泡算法在数列原本就是正序的时候性能最好,最好的时间为O(n).
这其实是给人造成误解的。
因为以上的冒泡算法的实现无论是在数列顺序怎样的情况下时间复杂度都为O(n^2),当数列为正序的情况下只是元素交换的三个步骤省去了,当然性能得到了提升,但是其比较的次数并没有得到减少,因此时间复杂度并没有变化。
而书上提到的O(n)的情况是经过以上的冒泡算法改进的。
其源代码如下:
public void bubbleSort(int arr[]) {
boolean didSwap;
for(int i = 0, len = arr.length; i < len - 1; i++) {
didSwap = false;
for(int j = 0; j < len - i - 1; j++) {
if(arr[j + 1] < arr[j]) {
swap(arr, j, j + 1);
didSwap = true;
}
}
if(didSwap == false)
return;
}
}
相关文章推荐
- Java开发环境配置
- JavaSE笔记
- Web项目使用Spring框架服务器启动加载xml文件的过程学习
- spring boot实战(第四篇)分散配置
- java设计模式第8弹--中介者模式
- Java的线程的join()方法
- Java 语言基础
- Unable to load configuration .../WEB-INF/struts2-core-2.3.20.jar!/struts-default.xml:82:179
- 在eclipse中输入.后没有提示
- java集合中如何遍历Map
- Maven修改JDK版本
- java虚拟机常用命令工具
- (2.1.1.5)java classLoader体系结构使用详解
- java学习感想
- SPRING事务隔离级别及传播行为
- Java的线程状态切换
- java I/0流与异常
- Java中的反射机制
- Java记录 -31- Java数组
- Struts2配置