插入排序,我理解的原理就是从一个数组中的第二位开始,也就是下标为1的元素存入到一个临时变量中,然后与之前的元素做对比,如果临时变量大,则不做交换,如果临时变量下,则将对比元素后移,将临时变量存入当前位置,继续对比直到前面没有元素可对比。
新手上路
代码如下:
工具类
public class ArrayIns {
private long[] a;
private int nElems;
public ArrayIns(int max){
a = new long[max];
nElems = 0;
}
//插入数据
public void insert(long value){
a[nElems] = value;
nElems++;
}
//循环遍历
public void display(){
for(int i=0;i<nElems;i++){
System.out.print(a[i]+" ");
}
System.out.println(" ");
}
//插入排序
public void insSort(){
int in,out;//in为内层循环,out为外层循环
for(out = 1;out<nElems;out++){
long temp = a[out];
in = out;
/**
* 当内层循环数大于零并且前一个数大于临时变量的时候
*/
while(in>0 && a[in-1] > temp){
//将大的数值放入后面
a[in] = a[in-1];
in--;
}
//跳出循环后,in的值已经固定,将临时变量赋予这个位置的值
a[in]=temp;
}
}
}
入口函数
public class insertSort {
public static void main(String[] args){
int maxSize = 100;
ArrayIns arr = new ArrayIns(maxSize);
arr.insert(77);
arr.insert(88);
arr.insert(11);
arr.insert(33);
arr.insert(00);
arr.insert(99);
arr.insert(22);
arr.insert(44);
arr.insert(66);
arr.insert(55);
arr.display();
arr.insSort();
System.out.println("___________分割线__________________");
arr.display();
}
}
77 88 11 33 0 99 22 44 66 55 ___________分割线__________________
0 11 22 33 44 55 66 77 88 99