插入排序

基本数据类型插入排序

插入排序:

元素个数: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();
	}
}


效率比较:

通常情况下

插入排序>选择排序>冒泡排序

对于基本有序数据,插入排序效率高,对于极端情况(逆序),插入排序不必冒泡排序快。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值