复习一下简单冒泡排序
冒泡排序比较简单,只要懂得其原理很容易写出相应的代码。
- 重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。(来源百度百科)
根据冒泡排序的定义,我们要做的就是两两依次比较数组data中的数据
if(data[i] > data[i+1]){
temp = data[i] ;
data[i] = data[i+1] ;
data[i+1] = temp ;
}
长度为n的数组,最多需要比较n-1次,只要这个数组在一次循环中没发生过比较,就说明已排序完毕。为了知晓是否发生了比较,要设置一个标志变量flag,当flag的值没有改变就说明循环中未出现过比较,类设计如下:
public class BSort {
//冒泡排序
private int[] data = null ; //排序前
private int[] array = null ; //排序后
public BSort(int[] data){
this.setData(data) ; //初始化数据
this.dataToArray() ; //自动调用比较算法,可以不放在构造方法中
}
private void setData(int[] data){
this.data = data ;
}
public String getArray(){ //以字符串形式输出
String s = "排序结果为:" ;
for(int i = 0 ;i < this.array.length ;i++){
s = s + this.array[i] + " " ;
}
return s ;
}
private void dataToArray(){
for(int i = 1 ;i < data.length ;i ++){
int flag = 0 ;
for(int j = 0 ;j < data.length - 1 ;j ++){
if(this.data[j] > this.data[j+1]){
int temp = 0 ;
temp = this.data[j] ;
this.data[j] = this.data[j+1] ;
this.data[j+1] = temp ;
flag = 1 ;
}
}
if(flag == 0){
this.array = this.data ;
break ;
}
}
}
}
- 测试
public class Test {
public static void main(String[] args) {
System.out.println(new BSort(
new int[]{77,15,22,17,33,77,125})
.getArray());
}
}
- 测试结果
排序结果为:15 17 22 33 77 77 125