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

来源:互联网 发布:软件自动安装器 编辑:程序博客网 时间:2024/05/18 01:44

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

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

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//包含等号,反而会多比较一次

原创粉丝点击