java插入排序

简单的讲就是把一个数字放在一串已经排好顺序的数组中,放进去后还要使得数组排序完整。

那么,就是1找位置,2填数字。这就是我的思路。

下面是插入排序的类:

package algorithm;

public class insertion_sort {
	
    public double[] insertion_one(double num,double[] has_sort){//将num加入到has_sort数组中这里has_sort是已经排序的
    	int i;                                                   //找位置部分
    	for(i=0;i<has_sort.length;i++){
    		if(num<has_sort[i])break;
    	}
    	has_sort=this.input_one(has_sort, i, num);
    	return has_sort;
     }
    public double[] input_one(double[] p,int num_in,double item){// 将一个数组中的item元素
    	double[] key=new double[p.length+1];                      //加入到p数组中的第num_in位置
    	for(int i=0;i<p.length+1;i++){                             //填数字的方法
    		if(i<num_in){
    		    key[i]=p[i];
    		}else if(i==num_in) {
    			key[i]=item;		
			}else if(i>num_in){
				key[i]=p[i-1];
			}
    	}
    	return key;
    }
    public void display(double[] p){ //显示数组函数
    	for(int i=0;i<p.length;i++){
    		System.out.println(p[i]);
    	}
    }
}

通过下面的方法测试下上面:

package algorithm;

public class text {
	public static void main(String[] args) {
         double[] array1={1,2,3,4,5,6,7};     //有序数组一个
         double[] array2;   //显示实验数组
         insertion_sort text1=new insertion_sort();//text“行动”:做插入排序
         array2=text1.insertion_one(3.3,array1);   //插入3.3的 
         array2=text1.insertion_one(3.6,array2);    //继续插入3.6的
         text1.display(array2);
         
	}
}

对于一个数组排序时 插入排序是拿第二个和第一个比,大的站第二小的去第一,然后是依次第二个和第三个比大的去第三小的去第二

这样个样子所以我加了如下的函数只需要加入到之前的类中

	public double[] insertion_self_com(double[] p){         //单一杂乱数组插入排序
		for(int j=0;j<p.length;j++){
			for(int i = 1;i<p.length;i++){
				if(p[i]<p[i-1]){
					double key;
					key=p[i-1];
					p[i-1]=p[i];
					p[i]=key;
				}
			}
		}
		return p;
	}

测试下

package algorithm;

public class text {
	public static void main(String[] args) {
         double[] array1={12,13,15,13,10,45,2,23};     //有序数组一个
         double[] array2;   //显示实验数组
         insertion_sort text1=new insertion_sort();//text“行动”:做插入排序
         array2=text1.insertion_self_com(array1);
         text1.display(array2);
         
	}
}

应该还算ok

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值