java算法:插入排序

java算法:插入排序

如,对EXAMPLE 字母进行排序:
E X A M P L E 开始
E [X] A M P L E E<X 不变
[A] E X M P L E A < E:A插入到E前
A E [M] X P L E ...
A E M [P] X L E
A E [L] M P X E
A E [E] L M P X

Java代码 复制代码
  1. publicclassInsertion{
  2. publicstaticvoidmain(String[]args){
  3. intn=20;
  4. MyItem[]a=newMyItem[n];
  5. for(inti=0;i<n;i++){
  6. a[i]=newMyItem();
  7. a[i].rand();
  8. }
  9. for(inti=0;i<n;i++){
  10. System.out.print(a[i]+"");
  11. }
  12. insertion(a,0,n);
  13. System.out.println("");
  14. print(a,n);
  15. }
  16. privatestaticvoidprint(MyItema[],intn){
  17. for(inti=0;i<n;i++){
  18. System.out.print(a[i]+"");
  19. }
  20. }
  21. publicstaticvoidinsertion(MyItem[]a,intl,intr){
  22. inti;
  23. for(i=r-1;i>=l+1;i--){
  24. compExch(a,i-1,i);
  25. }
  26. for(i=l+2;i<r;i++){
  27. intj=i;
  28. MyItemv=a[i];
  29. while(less(v,a[j-1])){
  30. a[j]=a[j-1];
  31. j--;
  32. }
  33. a[j]=v;
  34. }
  35. }
  36. publicstaticbooleanless(Itemv,Itemw){
  37. returnv.less(w);
  38. }
  39. publicstaticvoidexch(Item[]a,inti,intj){
  40. Itemt=a[i];
  41. a[i]=a[j];
  42. a[j]=t;
  43. }
  44. publicstaticvoidcompExch(Item[]a,inti,intj){
  45. if(less(a[j],a[i])){
  46. exch(a,i,j);
  47. }
  48. }
  49. }
public class Insertion {

	public static void main(String[] args) {
		int n = 20;
		MyItem [] a = new MyItem[n];
		for (int i = 0; i < n; i++) {
			a[i] = new MyItem();
			a[i].rand();
		}
		
		for (int i = 0; i < n; i++) {
			System.out.print(a[i] + " ");
		}
		
		insertion(a, 0, n);
		System.out.println("");
		print(a, n);
	}
	
	private static void print(MyItem a [], int n){
		for (int i = 0; i < n; i++) {
			System.out.print(a[i] + " ");
		}
	}
	
	public static void insertion(MyItem [] a, int l, int r){
		int i;
		for(i = r - 1; i >= l + 1; i--){
			compExch(a, i-1, i);
		}
		for (i = l + 2; i < r; i++){
			int j = i;
			MyItem v = a[i];
			while(less(v, a[j - 1])){
				a[j] = a[j - 1]; 
				j--;
			}
			a[j] = v;
		}
	}
	
	public static boolean less(Item v, Item w){
		return v.less(w);
	}
	
	public static void exch(Item [] a, int i, int j){
		Item t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	
	public static void compExch(Item [] a, int i, int j){
		if(less(a[j],a[i])){
			exch(a, i, j);
		}
	}
}

插入排序的运行时间主要依赖于输入文件中关键字的最初顺序。如,文件很大而且关键字已经排好(或者几乎排好),那么插入排序运算就很快了,而选择排序运行却很慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值