继承可以方便的实现向一个类中增加属性
多态是指以相同的方法处理来自不同类的对象,为了使多态能够正常的运行,这些不同的类必须从同一个基类派生而来
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//包含等号,反而会多比较一次