public class SimpleSort {
private int[] a;//待排序的数组
public int elems; //数据的长度,不是数组的长度
private int maxSize;
/*
* 初始化
*/
public SimpleSort(int max){
maxSize = max;
a = new int[maxSize];
elems =0;
}
public void add(int i){
if(elems==maxSize){
return;
}
a[elems] = i;
elems ++;
}
public void display(){
for(int i=0;i<elems;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
/*
* 在外层循环中,最好要写成for(int out =elems-1;out>1;out--)
* 因为如果当外层循环到(out=1),执行内层循环就变成了这种情况:for( int in=0;in<1;in++);即比较a[0]、a[1]的大小;这在内循环in<2已经执行了
*/
public void bubbleSort(){
for(int out = elems-1;out>0;out--){
for(int in = 0;in<out;in++ ){
if(a[in]>a[in+1]){
swap(in,in+1);
}
}
}
}
// 注意传值调用陷阱
public void swap(int i, int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//选择排序
public void selectSort(){
int index;
for(int out = 0;out < elems-1;out++){
index = out;//每一次进行外循环时,
for(int in =out+1;in<elems;in++){
if(a[in]<a[index]){
index =in;
}
}
swap(out,index);
}
}
public void insertSort(){
for(int out =1;out<elems;out++){
int temp = a[out];
int in = out;
// while循环作用,是用来为插入新元素,将元素后移让出位置
while(in>0 && a[in-1] >= temp){
a[in] =a[in-1];
in--;
}
a[in] = temp;
}
}
/**
* @param args
*/
public static void main(String[] args) {
SimpleSort array = new SimpleSort(10);
array.add(12);
array.add(10);
array.add(3);
array.add(4);
array.add(11);
array.add(8);
array.add(54);
array.add(7);
array.add(4);
array.display();
//array.bubbleSort();
array.insertSort();
//array.selectSort();
System.out.println("排序后的效果");
array.display();
}
}