基本数据类型插入排序
插入排序:
元素个数:n
外层循环:1<=out<=n-1
内层循环:x<=in<=out
过程:外层从第二个元素开始,到最后一个;0到out-1的元素已有序,内层循环从out位置向前找,将out位置元素插入到合适位置x,须将x到out-1之间的元素后移一个位置。
package datastructure.c3.sort.insertsort;
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 j=0;j<nElems;j++){
System.out.print(a[j]+" ");
}
System.out.println(" ");
}
public void insertionSort(){
int 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;
}
a[in]=temp;
}
}
}
package datastructure.c3.sort.insertsort;
public class InsertSortApp {
public static void main(String[] args) {
int maxSize=100;
ArrayIns arr;
arr=new ArrayIns(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
arr.display();
arr.insertionSort();
arr.display();
}
}
对象类型数据的插入排序
package datastructure.c3.sort.objectsort;
public class Persion {
private String lastName;
private String firstName;
private int age;
public Persion(String last,String first,int a){
lastName=last;
firstName=first;
age=a;
}
public void displayPersion() {
System.out.println("Last name:"+lastName+",First name:"+firstName+",Age:"+age);
}
public String getLast(){
return lastName;
}
}
package datastructure.c3.sort.objectsort;
public class ArrayInOb {
private Persion[] a;
private int nElems;
public ArrayInOb(int max){
a=new Persion[max];
nElems=0;
}
public void insert(String last,String first,int age){
a[nElems]=new Persion(last, first, age);
nElems++;
}
public void display(){
for(int j=0;j<nElems;j++){
a[j].displayPersion();
}
System.out.println("");
}
public void insertionSort(){
int in,out;
for(out=1;out<nElems;out++){
Persion temp=a[out];
in=out;
while(in>0 && a[in-1].getLast().compareTo(temp.getLast())>0){
a[in]=a[in-1];
--in;
}
a[in]=temp;
}
}
}
package datastructure.c3.sort.objectsort;
public class ObjectSortApp {
public static void main(String[] args) {
int maxSize=100;
ArrayInOb arr;
arr=new ArrayInOb(maxSize);
arr.insert("Evans", "Patty", 24);
arr.insert("Smith", "Doc", 59);
arr.insert("Smith", "Lorraine", 37);
arr.insert("Smith", "Paul", 37);
arr.insert("Yee", "Tom", 43);
arr.insert("Hashimoto", "Sato", 21);
arr.insert("Stimson", "Henry", 29);
arr.insert("Velasquez", "Jose", 72);
arr.insert("Vang", "Minh", 22);
arr.insert("Creswell", "Lucinda", 18);
System.out.println("Before sorting:");
arr.display();
arr.insertionSort();
System.out.println("After sorting:");
arr.display();
}
}
效率比较:
通常情况下
插入排序>选择排序>冒泡排序
对于基本有序数据,插入排序效率高,对于极端情况(逆序),插入排序不必冒泡排序快。