冒泡排序原理和JAVA实现
2012-03-01 15:42
302 查看
冒泡排序是一种比较排序,下面我实现一个从小到大的冒泡排序:
先定义两个变量:
待排序数组:int[] source;
数组长度 length = source.length;
原理如下:
1、开始:有length-1次循环,每次参与循环的是未排序的数。第一次参与循环的是整个数组,因为假设整个数组是无序的。
每次循环需要设置一个标志位: boolean flag = false;表示循环过程中是否产生了交换。
2、过程:循环过程中, 相邻的两个元素进行比较,如果source[j] > source[j+1],则交换两者顺序,同时标志位flag = true;表示产生了交换。每一次循环结束后,最大数沉到未排序部分的尾部,每次循环找出一个最大数。
3、结束:每次循环结束后,如果标志位flag未改变的话,证明未排序的部分中没有source[j] > source[j+1],即未排序部分已经有序,这时,跳出循环,排序结束。
或者length-1次循环结束后,数组有序。
为什么是length-1次而不是length循环,因为每次循环找出一个最大数,沉下去,length-1次循环后,只剩下一个元素,不需要进行任何比较,它就是最小的。
JAVA代码如下:
[java]
view plaincopyprint?
package sort;
import java.util.Scanner;
public class bubbleSort {
public void sort(int[] source){
int length = source.length;
boolean flag = false;
for(int i=1;i<=length-1;++i){
flag = false;
for(int j=0;j<length-i;++j){
if(source[j] > source[j+1]){
int temp = source[j];
source[j] = source[j+1];
source[j+1] = temp;
flag = true;
}
}
if(flag == false)
break;
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
bubbleSort bs = new bubbleSort();
while(in != null){
int num = in.nextInt();
int[] source = new int[num];
for(int i=0;i<num;++i){
source[i] = in.nextInt();
}
bs.sort(source);
for(int a:source){
System.out.print(a+" ");
}
System.out.println();
}
}
}
先定义两个变量:
待排序数组:int[] source;
数组长度 length = source.length;
原理如下:
1、开始:有length-1次循环,每次参与循环的是未排序的数。第一次参与循环的是整个数组,因为假设整个数组是无序的。
每次循环需要设置一个标志位: boolean flag = false;表示循环过程中是否产生了交换。
2、过程:循环过程中, 相邻的两个元素进行比较,如果source[j] > source[j+1],则交换两者顺序,同时标志位flag = true;表示产生了交换。每一次循环结束后,最大数沉到未排序部分的尾部,每次循环找出一个最大数。
3、结束:每次循环结束后,如果标志位flag未改变的话,证明未排序的部分中没有source[j] > source[j+1],即未排序部分已经有序,这时,跳出循环,排序结束。
或者length-1次循环结束后,数组有序。
为什么是length-1次而不是length循环,因为每次循环找出一个最大数,沉下去,length-1次循环后,只剩下一个元素,不需要进行任何比较,它就是最小的。
JAVA代码如下:
[java]
view plaincopyprint?
package sort;
import java.util.Scanner;
public class bubbleSort {
public void sort(int[] source){
int length = source.length;
boolean flag = false;
for(int i=1;i<=length-1;++i){
flag = false;
for(int j=0;j<length-i;++j){
if(source[j] > source[j+1]){
int temp = source[j];
source[j] = source[j+1];
source[j+1] = temp;
flag = true;
}
}
if(flag == false)
break;
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
bubbleSort bs = new bubbleSort();
while(in != null){
int num = in.nextInt();
int[] source = new int[num];
for(int i=0;i<num;++i){
source[i] = in.nextInt();
}
bs.sort(source);
for(int a:source){
System.out.print(a+" ");
}
System.out.println();
}
}
}
相关文章推荐
- 冒泡排序(Bubble Sort)原理及Java实现
- 冒泡排序原理分析及Java实现
- 简单排序Java实现(一):冒泡排序,选择排序,插入排序(原理及实现)
- 【排序算法】冒泡排序原理及Java实现
- 冒泡排序的原理及java代码实现
- 【排序算法】冒泡排序原理及Java实现
- 冒泡排序原理及Java实现
- 冒泡排序原理(java实现)
- 交换排序—冒泡排序(Bubble Sort)算法原理以及Java实现
- 【Java】数组的冒泡排序和选择排序(原理+代码实现)
- Java集合---ArrayList的实现原理
- 常见对象_数组高级冒泡排序原理图解、数组高级冒泡排序代码实现
- Java 枚举实现原理
- Java实现冒泡排序
- 深入Java集合学习系列二:HashMap的实现原理
- java实现冒泡排序
- 深入Java集合学习系列:LinkedHashSet的实现原理
- JAVA HashMap底层实现原理
- Java算法,一致性hash算法原理及java实现
- JAVA实现简单的冒泡排序与选择排序