java-算法-选择排序、插入排序

继承可以方便的实现向一个类中增加属性

多态是指以相同的方法处理来自不同类的对象,为了使多态能够正常的运行,这些不同的类必须从同一个基类派生而来

char 2个字节

大O表示法表示了算法的速度是如何与数据项的个数相关的

O(1)表示一个操作执行了常量的时间


选择排序:第n次从全部数字中选择出一个最大或者最小的数字跟第n个数字交换位置 

int [] arr={1,4,6,3,1,6,9,0,3,6,4,9};
		
		int num=arr.length;
		int sign=0;
		int temp=0;
		
		boolean b =false;
		
		for(int i=0;i<num;i++){
			
			for(int j=i;j<num-1;j++){
				
				if(arr[j+1]<arr[sign]){ //每次选出最小的
					
					sign=j+1;
					b=true;
				}
					
			}
			
			if(b){  //如果最小的为当前数字,则不进行移动
				temp=arr[sign];
				arr[sign]=arr[i];
				arr[i]=temp;
				b=false;
			}
			sign=i+1;
			for(int k=0;k<num;k++)
				System.out.print(arr[k]+" ");
			System.out.println();
		}


最后运行结果

0 4 6 3 1 6 9 1 3 6 4 9 0 1 6 3 4 6 9 1 3 6 4 9 0 1 1 3 4 6 9 6 3 6 4 9 0 1 1 3 4 6 9 6 3 6 4 9 0 1 1 3 3 6 9 6 4 6 4 9 0 1 1 3 3 4 9 6 6 6 4 9 0 1 1 3 3 4 4 6 6 6 9 9 0 1 1 3 3 4 4 6 6 6 9 9 0 1 1 3 3 4 4 6 6 6 9 9 0 1 1 3 3 4 4 6 6 6 9 9 0 1 1 3 3 4 4 6 6 6 9 9 0 1 1 3 3 4 4 6 6 6 9 9 

插入排序是稳定排序,即相同的数据不会交换位置

int [] arr={4,3,1,7,2,5,1};
		
		int temp=arr[1];//temp为标志
		
		int in=0,out=0;
		
		for(out=1;out<arr.length;out++){
			in=out;
			temp=arr[out];
			while(in>0&&arr[in-1]>temp){//从标志的前面一位开始比较,直到不小于它前面的数为止
				arr[in]=arr[in-1];//向后移动位置
				--in;
			}
			arr[in]=temp;//将标志放在位置移动的最后下标那
			for(int i=0;i<arr.length;i++){
				System.out.print(arr[i]+" ");
			}
			System.out.println();
				
		}
	}

输出结果

3 4 1 7 2 5 1 
1 3 4 7 2 5 1 
1 3 4 7 2 5 1 
1 2 3 4 7 5 1 
1 2 3 4 5 7 1 
1 1 2 3 4 5 7 



1 2 3 4 5 7 1 
1 2 3 4 5 7 7 
1 2 3 4 5 5 7 
1 2 3 4 4 5 7 
1 2 3 3 4 5 7 
1 2 2 3 4 5 7 
1 1 2 3 4 5 7 

从上面的一小段可以看出,最后末尾的1,移动到正数第二位,不会和第一位的1比较,但是我在java数据结构与算法一书中看到的算法,

in>0&&arr[in-1]>=temp//包含等号,反而会多比较一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值